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 :

Requête Insertion avec un TQuery


Sujet :

Bases de données Delphi

  1. #21
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 92
    Points
    92
    Par défaut modification (update) avec tquery sous delphi7
    bonjour

    j'ai fait un petit program de recherche j'ai deposer un notre tquery un dbgrid et un tedit
    apres dans la proprieté de tquery sa proprieté sql j'ai mit une requete comme suit :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    select*from table_client where (code_client=:E1)

    voila la recherche c bon

    merci

    maintenant la modification sur le chmp rechercher

  2. #22
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 92
    Points
    92
    Par défaut update
    bonjour
    anapuma

    la requete je la conné mais comment utiliser les objet sous delphi avec cette requete

    exemple

    j'ai cité que j'ai fait une recherche d'abord et afficher le resultat sur un dbgrid

    apres je double click sur le resultat qui sera afficher les champ sur des tedit

    dune autre form apres je modifi et je valide
    es que c fesable ou bien ya til quelqu 'un qui a une autre idée ?

    merci

  3. #23
    Membre du Club Avatar de milaybe
    Inscrit en
    Décembre 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 58
    Points : 58
    Points
    58
    Par défaut
    apres je modifi et je valide
    es que c fesable
    Oui c'est faisable, tu suis les mêmes raisonnements que pour Insert et Delete

  4. #24
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 92
    Points
    92
    Par défaut modification avec tquery?
    bonjour
    modification :

    quand je click sur le boutton modifier voila le program que j'ai ecrit:

    je le lance ma recherche apres je double click sur le dbgrid voila ce qui ce passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm2.DBGrid1DblClick(Sender: TObject);
    begin
    form4.edit1.Text := query2.FieldValues['code_client'];
    form4.edit2.text := query2.FieldValues['Nom_Client'];
    form4.edit3.text := query2.FieldValues['prenom_client'];
    form4.edit4.text := query2.FieldValues['adress_client'];
    form4.edit5.text := query2.FieldValues['tel_client'];
    form4.edit6.text := query2.FieldValues['code_postal'];
    end;
    apres dans la meme forme la ou il ya le dbgrid je click sur le boutton modifier jaffiche la form4 :
    apres je modifi par exemple l'adress du client avec son numero de telephonne apres je valide avec ce program :

    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
    procedure TForm4.Button1Click(Sender: TObject);
    var requete,x2,x3,x4 : string;
    x1,x5,x6 : integer;
    begin
    x1:= strtoint(edit1.Text);
    x2:= edit2.Text;x3:= edit3.Text;x4:= edit4.Text;x5:= strtoint(edit5.Text);x6:= strtoint(edit6.text);
    requete := 'insert into Table_Client(Code_Client,Nom_Client,Prenom_Client,Adress_Client,Tel_Client,Code_Postal) Values(:x1,:x2,:x3,:x4,:x5,:x6)';
    form2.query1.close;
    form2.query1.sql.clear;
    form2.query1.sql.add(requete);
    form2.query1.parambyname('x1').AsInteger  := strtoint (edit1.Text);
    form2.query1.parambyname('x2').Asstring   := edit2.text;
    form2.query1.parambyname('x3').Asstring   := edit3.text;
    form2.query1.parambyname('x4').Asstring   := edit4.text;
    form2.query1.parambyname('x5').AsInteger  := strtoint(edit5.text);
    form2.query1.parambyname('x6').AsInteger  := strtoint(edit6.Text);
    form2.query1.execsql;
    end;
    le message derreur qui maffiche est comme suit :
    ''key violation
    violation of primary key constraint'pk_table_client'.cant insert duplicate in object 'table_client'

    general sql error
    the statement has been terminated''
    je sais ce que sa veux dire ce que je ne comprend pas c que c une modification donc le tquery nest pas en mode 'edit' ?

    comment je fait alors ?

    merci

  5. #25
    Membre du Club Avatar de milaybe
    Inscrit en
    Décembre 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 58
    Points : 58
    Points
    58
    Par défaut
    Je ne comprends pas: tu fais une modification ou un ajout d'enregistrement?
    Parce que si tu fais une modification, tu devras utiliser UPDATE au lieu de INSERT.

  6. #26
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 92
    Points
    92
    Par défaut modification avec tquery?
    bonjour
    je fait une modification donc c'est update, c'est pas insert

    j'ai fait une erreur




    merci

  7. #27
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 92
    Points
    92
    Par défaut modification avec tquery?
    modification :

    quand je click sur le boutton modifier voila le program que j'ai ecrit:

    je le lance ma recherche apres je double click sur le dbgrid voila ce qui ce passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm2.DBGrid1DblClick(Sender: TObject);
    begin
    form4.edit1.Text := query2.FieldValues['code_client'];
    form4.edit2.text := query2.FieldValues['Nom_Client'];
    form4.edit3.text := query2.FieldValues['prenom_client'];
    form4.edit4.text := query2.FieldValues['adress_client'];
    form4.edit5.text := query2.FieldValues['tel_client'];
    form4.edit6.text := query2.FieldValues['code_postal'];
    end;
    apres dans la meme forme la ou il ya le dbgrid je click sur le boutton modifier jaffiche la form4 :
    apres je modifi par exemple l'adress du client avec son numero de telephonne apres je valide avec ce program :

    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
    procedure TForm4.Button1Click(Sender: TObject);
    var requete,x2,x3,x4 : string;
    x1,x5,x6 : integer;
    begin
    x1:= strtoint(edit1.Text);
    x2:= edit2.Text;x3:= edit3.Text;x4:= edit4.Text;x5:= strtoint(edit5.Text);x6:= strtoint(edit6.text);
    requete := 'update Table_Client set Nom_Client=:x2,Prenom_Client=:x3,Adress_Client=:x4,Tel_Client=:x5,Code_Postal=:x6 where code_client = :x1';
    form2.query1.close;
    form2.query1.sql.clear;
    form2.query1.sql.add(requete);
    form2.query1.parambyname('x2').Asstring   := edit2.text;
    form2.query1.parambyname('x3').Asstring   := edit3.text;
    form2.query1.parambyname('x4').Asstring   := edit4.text;
    form2.query1.parambyname('x5').AsInteger  := strtoint(edit5.text);
    form2.query1.parambyname('x6').AsInteger  := strtoint(edit6.Text);
    form2.query1.execsql;
    le message derreur qui maffiche est comme suit :
    'query1: field 'x1' is of unknown tyoe' process stoped use step or run to continue.
    alors comment jaffecte la valeur du code_client dans la clause where pour modifier les autres champs?

    merci

  8. #28
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 92
    Points
    92
    Par défaut
    modification :

    quand je click sur le boutton modifier voila le program que j'ai ecrit:

    je le lance ma recherche apres je double click sur le dbgrid voila ce qui ce passe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm2.DBGrid1DblClick(Sender: TObject);
    begin
    form4.edit1.Text := query2.FieldValues['code_client'];
    form4.edit2.text := query2.FieldValues['Nom_Client'];
    form4.edit3.text := query2.FieldValues['prenom_client'];
    form4.edit4.text := query2.FieldValues['adress_client'];
    form4.edit5.text := query2.FieldValues['tel_client'];
    form4.edit6.text := query2.FieldValues['code_postal'];
    end;
    apres dans la meme forme la ou il ya le dbgrid je click sur le boutton modifier jaffiche la form4 :

    apres je modifi par exemple l'adress du client avec son numero de telephonne apres je valide avec ce program :


    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
    procedure TForm4.Button1Click(Sender: TObject);
    var requete,x2,x3,x4 : string;
    x1,x5,x6 : integer;
    begin
    x1:= strtoint(edit1.Text);
    x2:= edit2.Text;x3:= edit3.Text;x4:= edit4.Text;x5:= strtoint(edit5.Text);x6:= strtoint(edit6.text);
    requete := 'update Table_Client set Nom_Client=x2,Prenom_Client=x3,Adress_Client=x4,Tel_Client=x5, Code_Postal=x6 where code_client = '+quotedstr(edit1.text);
    form2.query1.close;
    form2.query1.sql.clear;
    form2.query1.sql.add(requete);
    form2.query1.parambyname('x2').Asstring := edit2.text;
    form2.query1.parambyname('x3').Asstring := edit3.text;
    form2.query1.parambyname('x4').Asstring := edit4.text;
    form2.query1.parambyname('x5').AsInteger := strtoint(edit5.text);
    form2.query1.parambyname('x6').AsInteger := strtoint(edit6.Text);
    form2.query1.execsql;
    la modification est faite avec succée merci beaucoup les gas


    merci

  9. #29
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Dans ce code que tu viens de poster ta variable x1 ne sert à rien. C'était d'ailleurs l'erreur de ton précédent code puisque que tu n'alimentais pas sa valeur avant le ExecSQL.

    Voilà ce que j'aurais écrit:
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    procedure TForm4.Button1Click(Sender: TObject);
    var
      NomClient, PrenomClient, AdrClient: string;
      CodeClient, TelClient, CodePostal: Integer;
    begin
      // Variables pour alimenter les paramètres de la requête
      CodeClient := StrToInt(Edit1.Text);
      NomClient := Edit2.Text;
      PrenomClient := Edit3.Text;
      AdrClient := Edit4.Text;
      TelClient := StrToInt(Edit5.Text);
      CodePostal := StrToInt(Edit6.text);
     
      with Form2.Query1 do
      begin
        // Définition de la requête
        SQL.Clear;
        SQL.Add('update Table_Client');
        SQL.Add('set Nom_Client = :Nom_Client, Prenom_Client = :Prenom_Client,');
        SQL.Add('Adress_Client = :Adress_Client, Tel_Client = :Tel_Client,');
        SQL.Add('Code_Postal = :Code_Postal');
        SQL.Add('where Code_Client = :Code_Client');
        // Alimentation des paramètres
        ParamNyName('Nom_Client').AsString := CodeClient;
        ParamNyName('Prenom_Client').AsString := PrenomClient;
        ParamNyName('Adress_Client').Asstring := AdrClient;
        ParamNyName('Tel_Client').AsInteger := TelClient;
        ParamNyName('Code_Postal').AsInteger := CodePostal;
        ParamByName('Code_Client').AsInteger := CodeClient;
        try
          // Exécution
          Prepare;
          ExecSQL;
        finally
          // Fermeture
          Close;
        end;
      end;
    end;
    Tu remarqueras que les variables sont nommées de façon plus explicites que x1, x2, etc..., que le code est identé. Cela est important pour la clarté du code, notamment si tu dois y revenir dans 6 mois, un an ou plus.

    Tu remarqueras également que la requête Insert une fois effectuée est fermée, car inutile de la laisser ouverte pour rien.

    Voilà quelques conseils.
    @+ Claudius

  10. #30
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 92
    Points
    92
    Par défaut tquery
    bonjour

    merci cl@udius

  11. #31
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 92
    Points
    92
    Par défaut tquery
    la commande 'Prepare;' sert a quoi?

    merci

  12. #32
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par delphino7 Voir le message
    merci cl@udius
    Avec plaisir !
    Citation Envoyé par delphino7
    la commande 'Prepare;' sert a quoi?
    Ce n'est absolument obligatoire, mais cela prépare la requête avant son exécution.

    Citation Envoyé par Aide Delphi
    Envoie une requête au serveur pour une optimisation avant l'exécution.
    @+ Claudius

  13. #33
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 92
    Points
    92
    Par défaut tquery
    encore merci Cl@adius

  14. #34
    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
    une question: ton DbGrid utilisé les données de query1??
    si c'est vraie, alors tu peut utlisé directement les méthode de TQuery(insert,edit,delete) sans utlisé SQL , et aussi sans cassé la tete avec la mise à jour de ton DBGrid

  15. #35
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 92
    Points
    92
    Par défaut tquery
    bonjour edam


    tu ma dit que je peu faire une modif directement de mon dbgrid tu peu expliquer la methode stp ?

    si jai bien compri tu veu dire que jai mes enregistrements je click sur celui que je veux modifier et je modifi


    mais comment ? comment le program pourait il savoir que c l'enregistrement par exemple numero =°n que je veux modifier ?!!!

    merci

  16. #36
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 92
    Points
    92
    Par défaut tqurey insertion gerer les exceptions ?
    bonjour
    tquery insertion :

    maintenant se que je vuex si possible svp de jerer les exceptions des erreur par exemple quand l'utilisateur valide

    un enregistrement qui existe deja ou bien une double clé au lieu que le systeme maffiche lerreur jaimerai que sa moi qui

    jere lerreur on meton un message

    ce code_client existe deja veeuillez inserer un entre code ou bien appuyer sur annuler pour annuler linsertion

    cette enregistrement existe deja veuillez inserer un autre enregistrement oubien click sur annuler pour annuler linsertion

    voila mon source d'insertion : comment le pimmenter ?

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    procedure TForm3.Button1Click(Sender: TObject);
    var requete, NomClient, PrenomClient, AdrClient: string;
    CodeClient, TelClient, CodePostal: Integer;
    begin
       //variable pour allimenter les parametres de la requete 
       codeclient:= strtoint(edit1.text);
       nomclient:= edit2.Text; 
       prenomclient:= edit3.Text; 
       adrclient:= edit4.Text; 
       telclient:= strtoint(edit5.Text);
       codepostal:= strtoint(edit6.Text);
    requete := 'insert into Table_Client(Code_Client,Nom_Client,Prenom_Client,Adress_Client,Tel_Client,Code_Postal) Values(:codeclient,nomclient,prenomclient,adrclient,telclient,codepostal)'
    with form2.query1 do
     begin
    // definition de la raquete 
      close;
      sql.clear;
      sql.add(requete);
    //alimentation des parametres
      parambyname('codeclient').asinteger := strtoint(edit1.Text);
      parambyname('nomclient').asstring := edit2.text;
      parambyname('prenomclient').asstring := edit3.text;
      parambyname('adrclient').asstring := edit4.text;
      parambyname('telclient').asinteger := strtoint(edit5.Text);
      parambyname('codepostal').asinteger := strtoint(edit6.Text);
     try
    //execution
      prepare;
      execsql;
     exept
    //gerer les erreurs
    showmessage('linsertion annuler veuillez reessayer svp');
    end;
     
    end;
    end;

    merci

  17. #37
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 92
    Points
    92
    Par défaut tquery gerer les exceptions des erreurs
    bonjonr edam

    je vais consulté ton program et je te rependrai et jaurai quelque question a te posé si c possible tout a lheure

    aussi es que c possible davoir un exemple comment gerer les exception de redandance des code par exemple ou bien de redandance de lenregistrement

    avec le tquery?



    merci

  18. #38
    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
    le cle de ton table est un code inséré par l'utlisateur ce que je ne fait pas, et je te le déconseil, je préfére utlisé un cle que je controll genre auto-increment et mieux etre de type integer,
    pour te répondre, normallement en vérifier si la valleur de clé n'existe pas, la tu utlise soit une requete soit lookup de TQuery soit autre methode qu je connait pas, pour moi j'utlise une requete:
    bon dev

    edit: lis cette article

  19. #39
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 312
    Points : 92
    Points
    92
    Par défaut
    salut edam

    voila jai quelque question sil te plait peut tu me repondre ?

    ce source je lai eu de ton program que tu ma envoyer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TFClient.BitBtn4Click(Sender: TObject);
    var i:integer;
    begin
         i:=TBitBtn(sender).Tag;
         case i of
           1,2:begin
                Initialise(i);
                DBEdit12.SetFocus;
               end;
           3:Table.Delete;
         end;
    end;
    les questions:

    1- ''i:=TBitBtn(sender).Tag;'' elle sert a quoi ? tu veux dire quand je click sur le bitbutn1 ou bien 2 il se passe quoi ?

    2-sinon si tu peux en resumer mexpliquer ce petit program pour commencer ?


    merci

  20. #40
    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
    désoler, j'ai donné le programme sans le commenter, c'est pourquoi je l'avait suprimer, pour le simplifier;
    le tag ici, simplement pour séparé entre 3 Tbutton qui utlise la même méthode (onclick)
    regarde leur proprité tag en conseption;
    case of tag
    1:Nouveau;
    2:Modifier;
    3:Supprimer;
    end;


    edit: désoler, actuellement j'ai pas le temp, mais je peut essayer de répondre à tes questions

Discussions similaires

  1. Requête INSERT avec Regroupement
    Par curt dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 14/02/2009, 23h03
  2. requête insert avec boucle ?
    Par Kropernic dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/09/2008, 15h24
  3. Pb Requête INSERT avec QBE
    Par jubi73 dans le forum Paradox
    Réponses: 4
    Dernier message: 04/09/2007, 15h20
  4. Requête INSERT avec 2 requêtes sélection (2 tables)
    Par JiB@ dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 28/02/2007, 16h31
  5. Requête : Insert avec plusieurs tables
    Par bleu_ciel dans le forum Access
    Réponses: 4
    Dernier message: 01/06/2006, 21h42

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