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

Signaler
Messages postés
14
Date d'inscription
mardi 31 janvier 2006
Statut
Membre
Dernière intervention
19 mai 2015
-
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
-
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

Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
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
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
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
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
@simonpelloquin :



cantador
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
@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
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
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
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
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