IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Firebird Discussion :

Probleme SQL - Requetes Donnees Blob


Sujet :

SQL Firebird

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Probleme SQL - Requetes Donnees Blob
    Bonjour,

    j'ai un problème au niveau d'une requête SQL (firebird) que je dois absolument mettre en place.

    Voici m'a requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE VALUATION_SYSTEM 
    SET EQUATIONS = EQUATIONS  || 'equation' 
    WHERE NAME = 'nom'
    Le problème est que EQUATIONS est de type BLOB. Je veux concaténer EQUATIONS avec une chaîne de caractère. Il faudrait donc que j'utilise la fonction CAST.

    J'ai teste de cette facon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CAST(EQUATIONS AS VARCHAR(100))
    (EQUATIONS représente une équation mathématique très très longue. Environ 100.000 caractères. Je ne peux pas la diminuer).

    Merci d'avance pour votre réponse.

    Julien.

  2. #2
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Precision
    Je viens de me rendre compte que ma question n'est pas claire.


    Ma requête SQL est intégré dans une petite application Python (j'utilise la librairie kinterbasdb). Mon équation est contenu dans un fichier, que je vais lire. La lecture fonctionne bien, je l'ai teste a part.

    Voici exactement m'a requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    cur.execute("
      UPDATE VALUATION_SYSTEM 
      SET EQUATIONS = CAST(EQUATIONS AS VARCHAR(100)) || 'equation' 
      WHERE NAME = 'nom'
    ")
    (EQUATIONS de type BLOB)

    Comme je veux concaténer un BLOB avec un STRING, il y a conflit.

    Comment faire pour résoudre cela ?

    Merci.

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Si tu réduis ton équation très longue à une chaîne de 100 caractères, tu vas perdre le texte complet de ton équation.

    Mais pourquoi veux-tu donc ajouter le mot 'equation' au texte de l'équation ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Re
    Hi.

    En faites, étant donnez que mon équation est très longue je lis mon fichier 10000 par 10000. Sinon ma requête ne passe pas( + de 65000 caractère).

    C'est pour cela que je dois concaténer 'équation' (c'est le nom de ma variable , je l'ai mis entre cote sans faire expres) ,contenant un bout de mon équation, avec la partie déjà présente dans la table (j'ai mis 100 pour l'exemple).

    J'avais pense faire comme cela, mais si une autre solution est possible pour l'introduire dans la table, je suis preneur .

    Merci.

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Vas-tu faire des recherches sur le contenu du texte de l'équation ?

    Si la réponse est non, autant laisser l'équation dans un fichier texte et ne stocker que le chemin vers le fichier, comme tu le ferais pour une image.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Re
    Je pensais aussi faire de cette manière, le seul problème est que la table que je manipule contient déjà des équations au format 'chaîne de caractères' (je réalise des recherches sur certaines équations auparavant).

    ps : j'aurais une question a part, comment savoir si c'est fichier ou une chaîne qui est stocké dans le champ ?

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Quelle est la structure de la table ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Re
    J'ai fais un screenshot de Flamerobin :


  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Si je comprends bien, tu as un programme qui lit le fichier texte contenant l'équation en plusieurs fois afin d'insérer progressivement les morceaux dans la colonne EQUATIONS de type "Blob sub_type 1" ?

    N'y a t-il pas une instruction sous Firebird qui permettrait directement de lire le fichier texte pour insérer la donnée en une seule fois dans la colonne ?
    Un équivalent de LOAD DATA INFILE de MySQL ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Re
    C'est exactement cela

    Je me suis aussi demande si ce type de fonction existe sous firebird. J'ai beau cherché, je ne trouve rien...

  11. #11
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Si j'en crois ce qui est dit ici, cette fonction n'existait pas en 2009. Ne connaissant pas Firebird et n'ayant jamais stocké en BDD des données BLOB externes, je ne saurais t'aider davantage.

    Bonne chance !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  12. #12
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Re
    Ok.

    Merci pour votre aide en tout cas

  13. #13
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    1/ quelle version de Firebird ?
    2/ ton code Python ?
    3/ tu as lu la doc de kinterbasdb ?
    http://www.firebirdsql.org/devel/pyt...sdb.BlobReader
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  14. #14
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Re
    Bonjour,

    - Alors la version de firebird dont je dispose est 1.5 (je ne peux la mettre a jour, car firebird fonctionne en relation avec un logiciel professionnel qui demande cette version).

    - Mon code python : (je vous donne seulement une toute petite partie de mon code, car le reste n'a rien a voir avec mon probleme)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fd = open("file.txt", 'r')
    file = fd.readlines()
    for f in file :
          cur.execute("UPDATE VALUATION_SYSTEM SET EQUATIONS = EQUATIONS || \'%s\' WHERE NAME = \'%s\'" % (f, Name))
          con.commit()
    Comme je l'ai note en haut, mon problème reside dans le fait que je ne peux concaténer EQUATIONS avec f etant donne que EQUATIONS est un type BLOB.

    - Je n'avais pas encore cherche du cote de la doc de kinterbasdb. C'est un bonne idée. Je vais creuser de ce cote.

    Julien.

  15. #15
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    Citation Envoyé par ridrum Voir le message
    - Alors la version de firebird dont je dispose est 1.5 (je ne peux la mettre a jour, car firebird fonctionne en relation avec un logiciel professionnel qui demande cette version).
    Il faudra leur imposer le changement, Firebird 1.5 n'est plus supporté
    et avec la 2.1 tu aurais eu moins de problème

    mais bon je pense qu'en modifiant ton code Python après lecture de la doc, tu trouveras la solution.

    Au pire il y a l'UDF String2blob() qui devrait aider http://www.firebirdsql.org/refdocs/l...ring2blob.html
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  16. #16
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Re
    Je leur ai déjà propose de mettre leur version de firebird a jour, car elle date. Ils ne veulent rien savoir. Je ne suis qu'un petit stagiaire.... .

    Je crois avoir trouve la solution dans la documentation que vous m'avez fournis.

    Je vous remercie pour vos réponses rapides.

    Bonne journée et bonne continuation.

    Julien.

    ps : petite question, qu'entendez vous par : 'Firebird 1.5 n'est plus supporté' ? Ce serait peut être un argument a donner aux développeurs du logiciel.

  17. #17
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    Citation Envoyé par ridrum Voir le message
    ps : petite question, qu'entendez vous par : 'Firebird 1.5 n'est plus supporté' ? Ce serait peut être un argument a donner aux développeurs du logiciel.
    08-Oct-2009 Firebird 1.5.6 Released
    The project is pleased to announce that Firebird 1.5.6 release kits are now available for all the supported main-line platforms (Win32, Linux i86 and MacOS-X/Darwin i86 and PPC). No further sub-releases are planned for the V.1.5.x series.
    donc plus de maintenance de ce code
    cette version est déclarée obsolète
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  18. #18
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Re
    Bonjour,

    Je viens vous donner des nouvelles a propos de ma requête SQL. J'ai réussi a la faire fonctionner grâce a l'aide précieuse de makowski (MERCI ).

    De plus, j'ai 'découvert' un truc a propos des BLOB. Je ne sais pas si c'est spécifique a Kinterbasdb (la bibliothèque python), mais il m’était impossible de réaliser un UPDATE sur un champ BLOB. Je suis oblige de faire un INSERT. Apres je ne sais pas si c'est a cause de ma version de firebird. Mais je voulais tout de même le souligne, au cas ou quelqu'un aurait le même problème.

    Merci de votre aide.

    Problème résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Access] debutant sql, probleme de requete
    Par claude delattre dans le forum Langage SQL
    Réponses: 4
    Dernier message: 08/02/2006, 13h02
  2. Probleme de requete SQL
    Par arcane dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 04/10/2005, 11h59
  3. Probleme de requete SQL avec un champs date
    Par ju360modena dans le forum ASP
    Réponses: 5
    Dernier message: 16/06/2005, 11h18
  4. Probleme Session/requete SQL
    Par kolib dans le forum ASP
    Réponses: 4
    Dernier message: 14/06/2005, 16h23
  5. probleme avec requete sql aime pas les strings
    Par lil_jam63 dans le forum Bases de données
    Réponses: 3
    Dernier message: 24/02/2004, 14h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo