Brobleme d'insertion d'enregistrement sur table avec instruction "INSERT INTO"

cs_AsNiPeR Messages postés 14 Date d'inscription mardi 31 janvier 2006 Statut Membre Dernière intervention 19 mai 2015 - 8 avril 2013 à 15:19
sp40 Messages postés 1284 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 - 10 avril 2013 à 13:05
Salut tlm

@ Simon et Contador

voila, je me suis résinier a utiliser le SQL dans mon prog, et j'ai pris vos remarques en considération, mais ce la fait une semaine que je bute sur les insertions de nouveaux enregistrements sur mes tables.
voici mon code

With TQuery.Create(nil) do
   begin
    DatabaseName := 'ma_base';
    With SQL do
     begin
      Add('INSERT INTO TEntité');
      Add('Values ('+Label1.Caption+l1.Text+l2.Text+l3.Text+')');
     end;
    Open;
   end;



le code a été bien exécute, mais quand je vérifie ma table rien de nouveau.
la question est : qu'est ce que j'ai oublier ???

et merci d'avance.

@+

6 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 14
8 avril 2013 à 17:34
bonsoir,

Il manque dans Values() , d'abord le nom des champs à insérer !

et on a fait un execSQl sur un INSERT et non open

cantador
0
sp40 Messages postés 1284 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
8 avril 2013 à 18:16
Salut, je mets ma pierre à l'édifice aussi

- Alors quand tu fais un insert en sql, je te recommande fortement de mettre les noms de champs après le nom de ta table, ça évite des suprises...
Insert into MyTable(Champ1, Champ2, Champ3)
Values (Val1, Val2, Val3);

- Comme tu pourras le remarquer, les "values" sont en général séparées par des virgules...
(A moins que tu n'aies qu'un champ à insérer ?)

- Evites les noms de tables avec des caractères accentués (en plus ça fait frenchie...)

- Un champ texte est envoyé à la requête entre quotes

- Pour finir, créer ton query dynamiquement, c'est très bien... mais pense à le libérer quand tu ne t'en sers plus.

With TQuery.Create(nil) do begin
     DatabaseName := 'ma_base';
     With SQL do begin
          Add('INSERT INTO TEntité ([Nom de tes champs séparés par des virgules]');
          Add('Values ('''+Label1.Caption+''', '''+ l1.Text +''', '''+ l2.Text +''', '''+ l3.Text +''')');
     end;
     ExecSQL;
     Free;
end;


Voilàààààà

Simon
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 14
8 avril 2013 à 22:52
@simonpelloquin :



cantador
0
sp40 Messages postés 1284 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
9 avril 2013 à 08:01
@cantador :
Ceci dit, je suis très content que notre ami AsNiPeR se mette au SQL... C'est quand même vachement plus souple je trouve. On aura pas prêché dans le désert !


Simon
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sp40 Messages postés 1284 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
10 avril 2013 à 13:04
ouh, punaise !

J'ai oublié une parenthèse...

With TQuery.Create(nil) do begin
     DatabaseName := 'ma_base';
     With SQL do begin
          Add('INSERT INTO TEntité ([Nom de tes champs séparés par des virgules])');
          Add('Values ('''+Label1.Caption+''', '''+ l1.Text +''', '''+ l2.Text +''', '''+ l3.Text +''')');
     end;
     ExecSQL;
     Free;
end;




Simon
0
sp40 Messages postés 1284 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
10 avril 2013 à 13:05
ah zut, la mise en forme ne marche pas entre les balises de code...

Add('INSERT INTO TEntité ([Nom de tes champs séparés par des virgules])');

Simon
0
Rejoignez-nous