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

Langage Delphi Discussion :

Insertion avec tquery?


Sujet :

Langage Delphi

  1. #1
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut Insertion avec tquery?
    BONJOUR
    voila je veux faire une insertion avce tquery sur des table faite avec sql et outil de developpement delphi 7 voila ma requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    query1.Active := true;
    query1.SQL.Clear;
    query1.open;
    query1.SQL.Add('insert into employe (matricule,nom,prenom,lieu_ness,date_ness,date_recru,num_sec_soc,departement,fonction)');
    query1.SQL.Add('values('+ (mat.Text) +', '+ (nom.Text) +', '+ (pr.Text) +', '+ (dbedit2.Text) +',strtodate('+ (dbedit3.Text) +'), '+ (datetimepicker1.Format) +', '+ (sec.Text) +', '+ (dep.Text) +', '+ (combobox1.Items.Text) +' , '+ (fonct.Text) +' )');
    query1.Prepare;
    query1.ExecSQL;
    end;
    voila le message d'erreur qu'il me donne :
    ''query1: no sql statement available ''

    merci

  2. #2
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Peut être comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    query1.Active := False; //il faut desactiver avant de créer la requete
    Query1.Close;
    query1.SQL.Clear;
    query1.SQL.Add('insert into employe (matricule,nom,prenom,lieu_ness,date_ness,date_recru,num_sec_soc,departement,fonction)');
    query1.SQL.Add('values('+ QuotedStr(mat.Text) +','+ QuotedStr(nom.Text) +','+ QuotedStr(pr.Text) +','+ QuotedStr(dbedit2.Text) +','+QuotedStr(strtodate(dbedit3.Text) +','+ QuotedStr(datetimepicker1.Format) +','+ QuotedStr(sec.Text) +','+ QuotedStr(dep.Text) +','+ QuotedStr(combobox1.Items.Text) +','+ QuotedStr(fonct.Text) +' )');
    //query1.Prepare; Je ne sais pas si c'est indispenssable...
    query1.ExecSQL;
    Query1.Close;
    Je pense que c'est déjà un peut mieu, mais je ne sais pas si cela peut fonctionner...
    Les autres pourons peut être optimiser ce code...

  3. #3
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    bonjour

    avec ce program :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    query1.close;
    query1.SQL.Clear;
    query1.SQL.Add('insert into employe (matricule,nom,prenom,lieu_ness,date_ness,date_recru,num_sec_soc,departement,fonction)');
    query1.SQL.Add('values('+ (mat.Text) +', '+ (nom.Text) +', '+ (pr.Text) +', '+ (dbedit2.Text) +',strtodate('+ (dbedit3.Text) +'), '+ (datetimepicker1.Format) +', '+ (sec.Text) +', '+ (dep.Text) +', '+ (combobox1.Items.Text) +' , '+ (fonct.Text) +' )');
    query1.Prepare;
    query1.open;
    end;
    il m'affiche le message d'erreur suivant :

    ''the name is not permittedin this context only constants expressions or variable allowed here columns names are not permitted''

    merci

  4. #4
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Salut;

    comme je ne sais pas la structure de ta table ni avec quel SGBD tu travailles, je te conseil de procéder par élimination. Fais l'insertion d'un seul élément et regarde le résultat jusqu'à savoir quel champ provoque l'erreur.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  5. #5
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    As tu essayer en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    QuotedStr(mat.Text)
    ???

  6. #6
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    j'ai essayé ce que vous m'avez proposé rien j'ai toujours la meme erreur

    je ne c'est pas pourquoi j'ai cette erreur
    j'ai essayé de cette facon aussi toujours la meme erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    query1.Active:=false;
    query1.SQL.Clear;
    query1.SQL.Add('insert into employe (matricule,nom,prenom,lieu_ness,date_ness,date_recru,num_sec_soc,departement,fonction)');
    query1.SQL.Add('values( '+ (mat.Text) +', '+ (nom.Text) +', '+ (pr.Text) +', '+ (dbedit2.Text) +',strtodate('+ (dbedit3.Text) +'), '+ (datetimepicker1.Format) +', '+ (sec.Text) +', '+ (dep.Text) +', '+ (combobox1.Items.Text) +' , '+ (fonct.Text) +' )');
    query1.ExecSQL;
    query1.Close;

  7. #7
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Re;

    tu as essayé quoi au juste?
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 091
    Points : 41 069
    Points
    41 069
    Billets dans le blog
    62
    Par défaut
    +1

    l'erreur vient du manque de guillemet ou utilisation de Quotedstr.
    De toute façon il est de loin préférable d'utiliser des paramètres de requetes ne serait-ce que pour les dates
    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
     
    With Query1 do
     begin
       Close; // ou active:=false de façon à fermer la requête au cas où
       SQL.Clear;
       SQL.Add('insert into employe (matricule,nom,prenom,lieu_ness,date_ness,date_recru,num_sec_soc,departement,fonction)');
      SQL.add('values (:p0,:p1,:p2,:p3,:p4,:p5,:p6,:p7,:p8,:p9)');
      Params[0].Value:=mat.text;
      Params[1].value:=nom.text;
      Params[2].value:=pr.text;
      Params[3].value:=dbedit2.text;
      Params[4].value:=StrToDate(dbedit3.text);
      Params[5].value:=datetimepicker1.date;
      Params[6].value:=sec.text;
      Params[7].value:=dep.text;
      Params[8].value:=combobox1.text;
      Params[9].value:=fonct.text
      ExecSQL;
     end;
    de plus j'ai des doutes en voyant des dbEdit2.text ou DBedit3.text
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    bonjour

    voila ce que j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    begin
    query1.close;
    query1.SQL.Clear;
    query1.SQL.Add('insert into employe (matricule,nom,prenom,lieu_ness,date_ness,date_recru,num_sec_soc,departement,fonction)');
    query1.SQL.Add('values( QuotedStr('+ (mat.Text) +'), '+ (nom.Text) +', '+ (pr.Text) +', '+ (dbedit2.Text) +',strtodate('+ (dbedit3.Text) +'), '+ (datetimepicker1.Format) +', '+ (sec.Text) +', '+ (dep.Text) +', '+ (combobox1.Items.Text) +' , '+ (fonct.Text) +' )');
    query1.Prepare;
    query1.open;
    end;
    il me donne ce message d'erreur :

    ''general sql error
    'quotedstr' is not a recognized function name process stopped use step or run to continue ''

    merci

  10. #10
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    essaie la solution de SergioMaster (utilisation des paramètres c'est plus pratique pour la maintenance du code) et si tu as le même problème fais l'insertion élément par élément jusqu'à avoir trouver celui qui provoque l'erreur.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  11. #11
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    je vous remercie beaucoup
    en fin de compte j'ai trouvé mon erreur
    et mon insert marche parfaitemen

    maitenan j'aimerai vous demander comment faire un select (une recherche) avec un where ou je dois testé trois paramétres

    merci d'avance

  12. #12
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 091
    Points : 41 069
    Points
    41 069
    Billets dans le blog
    62
    Par défaut
    sans plus de renseignement c'est quand même dur, voici un squelette

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    With Query1 do
     begin
       Close; // ou active:=false de façon à fermer la requête au cas où
       SQL.Clear;
       SQL.Add('Select * from unetable WHERE col1=:p0 and col2=:p1 and col3=:p2') 
      Params[0].Value:=val1.text;
      Params[1].value:=val2.text;
      Params[2].value:=val3.text;
      Open;
    end;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  13. #13
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut mise à jour avec la fonction UP DATE
    bonjour à tous,
    voila je bloque sur la fonction UPDATE car je dois faire un mise à jour d'un enregistrement avec une condition (where)
    mon probléme réside dans la syntaxe de l'instruction
    j'ai essayé ca mais je pense que c'est faux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    query1.Active:=true;
    query1.SQL.Clear;
    query1.SQL.Add('UPDATE employe  where matricule='''+edit1.Text+''' set');
    query1.SQL.Add(' nom='''+edit2.text+''' , prenom='''+edit3.text+'''  ');
    query1.SQL.Add(' date_ness=datetostr('''+edit4.Text+''') ,lieu_ness='''+edit5.Text+''', date_recru='''+datetostr(datetimepicker1.Date)+''',num_sec_soc='''+(edit6.Text)+''' )');
    query1.SQL.Add(' structure='''+combobox1.Text+''', departement='''+edit7.Text+''', unite='''+edit8.Text+''', fonction='''+edit9.Text+''' ) ');
    showmessage(query1.Text);
    query1.ExecSQL;
    employe.Refresh;
    merci

  14. #14
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 091
    Points : 41 069
    Points
    41 069
    Billets dans le blog
    62
    Par défaut
    1) Tu persistes a ne pas utiliser les paramêtres ce qui est une mauvaise chose
    2) l'utilisation de de balise permet de mieux lire un message . sélectionnes ton code et clique sur le # de la barre d'outils
    3) si tu faisais attention à la syntaxe de UPDATE tu t'apercevrais que where doit se trouver à la fin et non au début.

    enfin si nos conseils ne sont d'aucune utilité , je ne vois pas pourquoi on persisterait à répondre
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  15. #15
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    biensure que vos réponses maident
    j'ai fait le where à la fin
    et jaimerais bien faire une requete paramétré mais mon patron me la interdit

    maintenant j'aimerais récupérer le résultat de ma requete dans des TEdit
    est_ce que j'utilise FieldbyName?

    encore merci

  16. #16
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    si tu commence par lire un peut:
    http://delphi.developpez.com/cours/?page=sgbd#sgbd-bde
    et aussi voir les demos de delphi qui sont installer avec
    car en peut quelque fois surpasser les requettes, et utilisé les méthodes des comosant DB, (inset, append,edit,post, cancel, ..) voir l'aide en ligne
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  17. #17
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    et cette instruction e quoi sert elle?
    query1.Params.ParamValue

  18. #18
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    Citation Envoyé par lila23 Voir le message
    jaimerais bien faire une requete paramétré mais mon patron me la interdit
    , encore un patron de m..
    alors, regarde du coté de Format;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     const
        Upda1='UPDATE employe set matricule=''%s'' nom=''%s'',prenom=''%s'',date_ness=''%s'','+
    'lieu_ness=''%s'', date_recru=''%s'',num_sec_soc=''%s'',structure=''%s'','+
    'departement=''%s'', unite=''%s'', fonction=''%S''';
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  19. #19
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut comment récupérer le résultat d'un SELECT dans des edits
    voila j'effectue une recherche sur un paramétre matricule et j'aimerais qu'aprés la recherche je puisse récupéré chak champ et le mettre dans un TEdit j(ai essayé com ca ca ne marche pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    query1.Active:=false;
    query1.SQL.Clear;
    query1.SQL.Add(' select * from employe where matricule='''+edit1.Text+''' ');
    query1.Open;
    edit2.Text:=query1.ParamByName('nom').AsString;
    est ce que kelkun pourrai me dire commen on procéde ou me dire ou est lerreur dans mon code

    merci infiniment

  20. #20
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    matricule est integer ou string??
    une idée pour charger tes Tedit, (je préfére utilisé les TDBedit);
    renome les avec les nom des chmaps;
    faire une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i:=0 to query.fields.count-1
     begin
       s:=query.fields[i].name // à corriger
       Tedit(FindComponent(s)).text:=query.fields[i].asstring;
      end;
    voir faq
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

Discussions similaires

  1. [INSERT][SELECT] insert avec un select imbriqué
    Par narmataru dans le forum SQL
    Réponses: 11
    Dernier message: 06/03/2013, 03h04
  2. Requête Insertion avec un TQuery
    Par delphino7 dans le forum Bases de données
    Réponses: 44
    Dernier message: 29/03/2008, 15h16
  3. Probleme de Refresh avec TQuery et DBGrid
    Par insoo dans le forum C++Builder
    Réponses: 7
    Dernier message: 25/11/2003, 17h20
  4. INSERT avec procédure stockée / Clef de type AutoInc
    Par bgdelphi dans le forum Bases de données
    Réponses: 5
    Dernier message: 18/10/2003, 18h30
  5. Problème d'insertion avec MySQL
    Par Sonny dans le forum ASP
    Réponses: 13
    Dernier message: 28/08/2003, 13h52

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