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

C++Builder Discussion :

[DBExpress] Formulaire d'insertion (Base de donnée)


Sujet :

C++Builder

  1. #1
    Membre régulier Avatar de Nadd
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 160
    Points : 95
    Points
    95
    Par défaut [DBExpress] Formulaire d'insertion (Base de donnée)
    Bonjour
    J'ai su crée un petit formulaire (Form) pour mon programme qui a pour but d'ajouter une donnée à l'une de mes table.

    La requête devrait sembler à ca (- modification) :

    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
     
    INSERT INTO [DBUse].[dbo].[Table_2]
               ([ID]
               ,[Nom]
               ,[Prenom]
               ,[Adresse]
               ,[Email]
               ,[Tel]
               ,[Fax]
               ,[Type]
               ,[Client])
         VALUES
               (2
               ,'Zaa'
               ,'Zaa'
               ,'Chauss'
               ,'Aucune'
               ,'Aucun'
               ,'Aucun'
               ,'Administrateur'
               ,'Oui')
    Je dispose sur mon Formulaire d'un boutton "Enregistrer", et j'aimerais que lorsque je clic dessus, ce prenne les données contenue dans les Champs Texte et les replaces dans la requête. Mais pour la requête... Comment faire ? QUe dois-je utiliser comme composant ? Un TSQLSimpleDataSet ? un TSQLQuery (+ TSQLConnection) ?

    En vous remerciant d'avance,

    Nadd.

  2. #2
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    à priori je dirais TSQLQuery...


    compose d'abord la chaine representant ta requete par rapport aux données
    provenant de tes boites de saisies...
    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
     
    AnsiString name = EDT_NAME->Text;
    AnsiString email = EDT_EMAIL->Text;
    int CustId =....;
    ...etc...
     
    String MyQueryStr = "INSERT INTO ...... VALUES("
                                 + IntToStr(CustId)+",'"
                                 + name + "','"
                                 + ....
                                 + ")";
     
    SQLQuery1->SQL->Clear();
    SQLQuery1->SQL->Text = MyQueryStr;
    SQLQuery1->PrepareStatement();
    SQLQuery1->ExecSQL(false);
    bon c'est toujours à prendre avec des pincettes car nous n'avons pas les mêmes composants dbexpress....

  3. #3
    Membre régulier Avatar de Nadd
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 160
    Points : 95
    Points
    95
    Par défaut
    Etant donnée que je n'ai pas réussi avec le TSQLQuery, j'ai décidé d'essaier avec un SimpleDataSet (Qui avais bien marcher dans mon dernier problème).
    Seulement, une nouvelle erreur apparait !

    Mon Code :

    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
     
    void __fastcall TMDIChild3::SaveClick(TObject *Sender)
    {
    String name = Edit1->Text;
    String prenom = Edit2->Text;
    String adresse = Edit3->Text;
    String email = Edit4->Text;
    String tel = Edit5->Text;
    String fax = Edit6->Text;
    String type = ComboBox1->Text;
     
    String myQuery = "INSERT INTO Table_2(ID,Nom,Prenom,Adresse,Email,Tel,Fax,Type,Client) VALUES (NULL,'Name','Test1','Test1','Test1','Test1','Test1','Test1','Test1')";
     
    SimpleDataSet1->Close();
    SimpleDataSet1->DataSet->Close();
    SimpleDataSet1->DataSet->CommandText = myQuery;
    SimpleDataSet1->DataSet->Open();
    SimpleDataSet1->Open();
     
    }
    L'erreur est :

    'Cursor not returned from Query'
    Que puis-je faire ?

    [PS] : Les données s'ajoutent bien à la Table_2...

  4. #4
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    je ne sais pas si tu as le droit de faire des open() avec de requetes du style insert... regarde si tu as plutot quelque chose du style ExecSQL() au moins sur le DataSet...

    NB : fait aussi attention à ce que SimpleDataSet1 ne soit relié à aucune datasource ou autre...
    ( n'oublie pas que tu travailles avec des composant unidirectionnels )

  5. #5
    Membre régulier Avatar de Nadd
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 160
    Points : 95
    Points
    95
    Par défaut
    Aucun ExecSQL

    J'obtient cette erreur : "Unable to determine field names for %s" et "Unable to execute this Query" lorsque j'utilise ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SQLQuery1->Close();
    SQLQuery1->SQL->Clear();
    SQLQuery1->SQL->Text = myQuery; 
    SQLQuery1->PrepareStatement(); 
    SQLQuery1->ExecSQL(false);
    SQLQuery1->Open();
    Cordialement,

    Nadd.

  6. #6
    Membre régulier Avatar de Nadd
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 160
    Points : 95
    Points
    95
    Par défaut
    Muarf ^^
    Problème résolu !

    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
     
    void __fastcall TMDIChild3::SaveClick(TObject *Sender)
    {
    String name = Edit1->Text;
    String prenom = Edit2->Text;
    String adresse = Edit3->Text;
    String email = Edit4->Text;
    String tel = Edit5->Text;
    String fax = Edit6->Text;
    String type = ComboBox1->Text;
     
    String myQuery = "INSERT INTO Table_2(ID,Nom,Prenom,Adresse,Email,Tel,Fax,Type,Client) VALUES (NULL,'Name','Test1','Test1','Test1','Test1','Test1','Test1','Test1')";
     
    SQLQuery1->SQL->Clear();
    SQLQuery1->SQL->Text = myQuery;
    SQLQuery1->ExecSQL(false);
     
    }
    Le "SQLQuery1->PrepareStatement()" semblait poser problème, et l'Open et le Close inutile.

    Encore une fois, un grand merci !


    Amicalement,

    Nadd.

  7. #7
    Membre régulier Avatar de Nadd
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 160
    Points : 95
    Points
    95
    Par défaut
    Par contre, je n'ai pas bien compris pour l'insertion des "nom", "prénom", ... dans la requête SQL.

    Pouvez vous m'éclairez ?

    En vous remerciant, une fois de plus, d'avance,

    Nadd.

  8. #8
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    en fait c'est juste la préparation d'une chaine de caractere qui va constituer la requete....

    quand tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    String name = Edit1->Text;
    String prenom = Edit2->Text;
    String adresse = Edit3->Text;
    String email = Edit4->Text;
    String tel = Edit5->Text;
    String fax = Edit6->Text;
    String type = ComboBox1->Text;
     
    String myQuery = "INSERT INTO Table_2(ID,Nom,Prenom,Adresse,Email,Tel,Fax,Type,Client) VALUES (NULL,'Name','Test1','Test1','Test1','Test1','Test1','Test1','Test1')";
    là il faut bien remplacer 'Name' 'Test1' par les valeurs des variables prenom, adresse, etc....

    donc on fait une concatenation de chaine de caracteres :
    requete = "du texte"+prenom+"du texte" +nom

    soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    AnsiString MyQueryStr = "INSERT INTO Table_2(ID,Nom,Prenom,Adresse,Email,Tel,Fax,Type,Client) VALUES(" 
                                         +Id+"','" 
                                         +prenom+"','"
                                         +adresse+"','"
                                          ..........
                                          +")";
    voilà la requete est prete sous forme d'une chaine de caractère..

  9. #9
    Membre régulier Avatar de Nadd
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 160
    Points : 95
    Points
    95
    Par défaut
    Merci beaucoup Ca marche nickel
    J'ai repris ce que vous aviez fait pour le Int plus haut.

    Encore une fois merci beaucoup !

    Cordialement,

    Nadd.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 134
    Points : 85
    Points
    85
    Par défaut
    slt,

    AnsiString MyQueryStr = "INSERT INTO Table_2(ID,Nom,Prenom,Adresse,Email,Tel,Fax,Type,Client) VALUES("
    +Id+"','"
    +prenom+"','"
    +adresse+"','"
    ..........
    +")";
    Erreur de syntaxe chez moi... Pouvez-vous m'aider?

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 9
    Points : 8
    Points
    8
    Par défaut storedproc
    Une requête comme celle là génere plus de traffic sur le réseau et plus de travail qu'une procédure stockée.
    Avec une stored proc, seules les données à insérer transitent sur le réseau (ou presque), la requête, elle, est sur le serveur.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 134
    Points : 85
    Points
    85
    Par défaut
    Quelqu'un peux m'aider pour la syntaxe svp?

  13. #13
    Membre actif Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Points : 206
    Points
    206
    Par défaut
    moi je fais comme cela et ca marche tres bien.

    Code C++ : 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
    TLocateOptions Opts;
         if(Table->Locate("Ncd",Form1->tab[Form1->cptuser]->Ncd,Opts))
          { 
           Table->Edit();
           Table->FieldByName("Ncd")->Value   = user->Text.c_str();
           Table->FieldByName("Cod")->Value   = "????";
           Table->FieldByName("Nom")->Value   = nom->Text.c_str();
           Table->FieldByName("Pren")->Value  = prenom->Text.c_str();
           Table->FieldByName("Adre")->Value  = adresse->Text.c_str();
           Table->FieldByName("Loca")->Value  = localite->Text.c_str();
           Table->FieldByName("Vill")->Value  = ville->Text.c_str();
           Table->FieldByName("Gsm")->Value   = gsm->Text.c_str();
           Table->FieldByName("Tel")->Value   = telephone->Text.c_str();
           Table->FieldByName("Mail")->Value  = email->Text.c_str();
           Table->FieldByName("Date")->Value  = datins->Text;
           Table->Post(); 
           Table->Refresh();
          }


    et..........

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if(strcmp(Form1->tab[Form1->cptnuser]->nom,user->Text.c_str())!=0)
           {
             AnsiString a;
             a = " UPDATE GestEmp SET Pseudo = '" + user->Text + "'";
             a = a +  " where Pseudo = '" + Form1->tab[Form1->cptnbuser]->nom  
             + "'";
     
             Form27->update->SQL->Clear();
             Form27->update->SQL->Add(a);
             Form27->update->ExecSQL();
             Form27->Table1->Refresh();
     
             ShowMessage(" Les nouvelles données sont sauvegardées ");
           }

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 134
    Points : 85
    Points
    85
    Par défaut
    Merci pour ta réponse, elle m'aide beaucoup. Cependant j'aimerais utiliser la requête "INSERT" et je n'arrive pas a adapter ton code. (erreur de syntaxe)

    AnsiString a = "INSERT INTO serveurs(nom,max,map) VALUES("+nom1+"','"+max1+"','"+map1+"','"+")";
    Images attachées Images attachées  

  15. #15
    Futur Membre du Club
    Inscrit en
    Août 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Le "SQLQuery1->PrepareStatement()" semblait poser problème
    J'ai eu le même probleme il suffit de remplacer le preparestatement par
    Prepared = true ...

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

Discussions similaires

  1. Formulaire et insertion base de données
    Par extensite dans le forum Django
    Réponses: 1
    Dernier message: 26/08/2019, 18h02
  2. probleme insertion multiple d'une formulaire dans la base de donné
    Par geni1985 dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 03/04/2011, 21h48
  3. ajout dans un formulaire et une base de donnée
    Par mademoizel dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/06/2006, 14h42
  4. [Conception] Consulter les données d'un formulaire via la base de données
    Par snakejl dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 16/05/2006, 19h51
  5. [MySQL] Génération automatique de formulaire sur une base de données
    Par Tr@nkill dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 04/04/2006, 14h28

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