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

Bases de données Delphi Discussion :

Erreur lors d'un INSERT sur une table dans Firebird via dbExpress


Sujet :

Bases de données Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2002
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Erreur lors d'un INSERT sur une table dans Firebird via dbExpress
    J'ai créé une base de donnée en me servant du tutoriel: "Delphi 2010: Connexion à Firebird via dbExpress". Cela fonctionne très bien pour faire des recherches, par contre j'essaie d'insérer des données et j'obtiens l'erreur: "Le projet a déclenché la classe d'exception TDBXError avec le message "Column Unknown VA2 at line 2, column 48". Voici le code pour l'insertion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
      clientdataset3.Active := false;
      sqlquery3.close;
     
      sqlquery3.SQL.Clear;
     
      sqlquery3.SQL.Add('Insert into CERTIFICAT_RECEVABLE (C_REC_CLE,C_REC_NUMJOB,C_REC_NUMFACTURE,C_REC_CLIENT,C_REC_MONTANT,C_REC_DATE_PAIEMENT,C_REC_FINALISER,C_REC_DATE_ENTREE)');
      sqlquery3.SQL.Add('values (GEN_ID(GEN_CERTIFICAT_RECEVABLE_ID,1),:va2 ,:va3,:va4,:va5,NULL,0,:va8)');
     
      sqlquery3.ParamByName('va2').AsString := copy(REC_NUMJOB.Text,0,10);
      sqlquery3.ParamByName('va3').AsString := copy(REC_NUMFACTURE.Text,0,10);
      sqlquery3.ParamByName('va4').AsString := REC_CLIENT.Items[REC_CLIENT.ItemIndex];
      sqlquery3.ParamByName('va5').AsCurrency := strtofloat(REC_MONTANT.Text);
      sqlquery3.ParamByName('va8').AsString := '29.03.2012';
     
      sqlquery3.ExecSQL(true);
      clientdataset3.Active := true;

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    J'utilise aussi SQLQuery DBExpress mais sur Sybase

    Tu passe "True" au paramètre ExecDirect dans ExecSQL ?
    Avec les requêtes paramètrées, il faut justement un Prepare !

    c'est écrit dans la documentation
    ExecDirect indique que la requête ne doit pas être préparée avant son exécution. La valeur true peut être attribuée à ce paramètre si la requête ne comporte aucun paramètre. Si la valeur false lui est attribuée, la requête sera préparée avant son exécutio
    Perso, je ne passe pas de valeur, donc False par défaut !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2002
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour la réponse. J'ai essayé aussi cette version, i.e. enlevé le true et ne rien mettre ou mettre false, puis j'obtiens alors : "Le projet a déclenché la classe d'exeption EDatabaseError avec le message 'SQLQuery3: Curseur non renvoyé par Query'." Par contre, malgré l'erreur, l'opération a été effectuée sur la base de donnée.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    L'erreur "Curseur non renvoyé par Query" correspond probablement à clientdataset3.Active := true;.
    Je suppose que sqlquery3 est lié par un TDataSetProvider à clientdataset3, tu dois relancer un SELECT dans sqlquery3 pour que cela fonctionne !

    Tu devrais éviter d'utiliser la même Query à la fois pour un SELECT et pour un INSERT surtout si le Query est couplé avec un TDataSetProvider ou un DataSource et un DBGrid
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2002
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Ok, oui tu as tout compris pour la liaison. Avec ton aide j'ai modifier le code et tout semble bien fonctionner. Merci beaucoup.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    sqlquery4.close;
     
      sqlquery4.SQL.Clear;
     
      sqlquery4.SQL.Add('Insert into CERTIFICAT_RECEVABLE (C_REC_CLE,C_REC_NUMJOB,C_REC_NUMFACTURE,C_REC_CLIENT,C_REC_MONTANT,C_REC_DATE_PAIEMENT,C_REC_FINALISER,C_REC_DATE_ENTREE)');
      sqlquery4.SQL.Add('values (GEN_ID(GEN_CERTIFICAT_RECEVABLE_ID,1),:va2 ,:va3,:va4,:va5,NULL,0,:va8)');
     
      sqlquery4.ParamByName('va2').AsString := copy(REC_NUMJOB.Text,0,10);
      sqlquery4.ParamByName('va3').AsString := copy(REC_NUMFACTURE.Text,0,10);
      sqlquery4.ParamByName('va4').AsString := REC_CLIENT.Items[REC_CLIENT.ItemIndex];
      sqlquery4.ParamByName('va5').AsCurrency := strtofloat(REC_MONTANT.Text);
      sqlquery4.ParamByName('va8').AsString := '29.03.2012';
     
      sqlquery4.ExecSQL();
     
      clientdataset3.Active := false;
      sqlquery3.close;
      sqlquery3.SQL.Clear;
      sqlquery3.SQL.Add('SELECT * from CERTIFICAT_RECEVABLE');
      sqlquery3.SQL.Add('ORDER BY C_REC_CLE');
     
      sqlquery3.open;
      clientdataset3.Active := true;

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

Discussions similaires

  1. [MySQL] Erreur lors de l'insertion d'une image dans un tableau
    Par bigwade dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 16/05/2013, 15h24
  2. Erreur lors de l'insertion d'une ligne (table avec relation 1-0)
    Par abbepierre94 dans le forum Silverlight
    Réponses: 9
    Dernier message: 10/01/2011, 12h34
  3. Réponses: 11
    Dernier message: 21/11/2006, 01h57
  4. Réponses: 3
    Dernier message: 07/12/2005, 14h28
  5. Erreur lors de l'ajout d'une table
    Par FredMines dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 27/07/2005, 13h13

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