Insert avec autoincrément sous Delphi

DenisPhil Messages postés 20 Date d'inscription mardi 13 mai 2008 Statut Membre Dernière intervention 21 août 2009 - 19 juil. 2009 à 22:53
vico8000 Messages postés 287 Date d'inscription lundi 18 janvier 2016 Statut Membre Dernière intervention 14 février 2018 - 21 juil. 2017 à 11:06
Bonjour,
j'ai créé une table sous Access avec une clé auto-incrémentée.
Dans un prog Delphi, je veux insérer des données dans cette table.
Mon pb est que je ne trouve pas comment écrire le 'insert' ???
Le code suivant ne fonctionne pas :
ADOQuery1.SQL.Add('insert into EtatImpres values (');
ADOQuery1.SQL.Add('?' + VIRG); <=== champs auto-incrémenté
ADOQuery1.SQL.Add(QuoteStr(Table_Choisie) + VIRG);
...
ADOQuery1.SQL.Add(QUOTE + dt + QUOTE + ')');
ADOQuery1.ExecSQL;
Quelqu'un a-t-il une idée ? Merci

11 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 13
20 juil. 2009 à 17:23
bonsoir,
si tu as un champ autoincrémental dans la table, tu n'as plus besoin de t'en occuper..

Tu stockes uniquement les données dans les autres champs.

et lors de l'insert, il s'enregistrera tout seul

Access de tout s'occupe


cantador
0
DenisPhil Messages postés 20 Date d'inscription mardi 13 mai 2008 Statut Membre Dernière intervention 21 août 2009
20 juil. 2009 à 20:42
Bonjour Cantador,
merci de cette réponse rapide.
je l'ai mise en application, avec le code :
[i]ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('insert into EtatImpres values (');
// ADOQuery1.SQL.Add(VIRG); <== sans renseigner
ADOQuery1.SQL.Add(QuotedStr(Table_Choisie) + VIRG);
...
ADOQuery1.SQL.Add(QuotedStr(dt) + ')');
ADOQuery1.ExecSQL;/i
mais Access me dit : nombre de champs doit être égal à celui de la table;

et avec le code :
[i]ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('insert into EtatImpres values (');
ADOQuery1.SQL.Add(VIRG); < = juste une ',' pour séparer
ADOQuery1.SQL.Add(QuotedStr(Table_Choisie) + VIRG);
...
ADOQuery1.SQL.Add(QuotedStr(dt) + ')');
ADOQuery1.ExecSQL;/i
mais Access me dit : erreur dans la syntaxe du 'insert into';

Access de tout s'occupe
mais des soucis j'ai encore
Merci encore...
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
20 juil. 2009 à 22:45
ex :

Adoquery1.SQL.Add('INSERT INTO table(NOM, PRENOM) VALUES
('+ QuotedStr(Nom_edit.Text) + ',
'QuotedStr(Prenom_edit.Text) + ')');

j'ai pas testé..

ou tu utilises des paramètres (plus simple)

cantador
0
DenisPhil Messages postés 20 Date d'inscription mardi 13 mai 2008 Statut Membre Dernière intervention 21 août 2009
20 juil. 2009 à 23:12
Bonjour (bonsoir ?) Cantador,
ta chanson avait les bonnes paroles ! Ça marche !
Le secret était de citer les champs à mettre jour, en omettant celui auto incrémental !

Merci de ton aide.
A une autre fois.
0

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

Posez votre question
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
21 juil. 2009 à 11:54
content que ça marche

cantador
0
cavalier2400 Messages postés 120 Date d'inscription mardi 8 juillet 2008 Statut Membre Dernière intervention 1 décembre 2010 1
21 juil. 2009 à 19:27
Bsr Cantador, j'ai besoin d'aide...
insert into table ([chps1],[chps2]) values (val1,val2);
avec ou sans le champs auto-incrémenté, si le champ y figure il est automatiquement incrémenté... on remarque que
pour des commandes delphi tel que, Table1.add ou Table1.insert
n'incrémente pas le champs auto-incrémente,
La valeur de l'auto-incrémnte continue toujours après la dernière valeur de order asc. ou table1.last,
(A noter qu'Accèss n'accepte généralement qu'un seul champs auto-increment) généralement c'est une clé avec un index unique.
ou de table1.last.
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
21 juil. 2009 à 19:33
@cavalier2400:
merci de refaire un post

cantador
0
DenisPhil Messages postés 20 Date d'inscription mardi 13 mai 2008 Statut Membre Dernière intervention 21 août 2009
22 juil. 2009 à 14:38
Bonjour,
je me permets de citer ma petite expérience en la matière.
Pour faire un 'insert', en Delphi, dans une table Access avec un champ auto-incrémental (qui est la clé de la table), j'ai écrit :
ADOQuery1.SQL.Add('insert into Table1 (ch2, ch3, ch4) values (val2, val3, val4)');
le champ ch1, non cité est auto-incrémental et se débrouille... tout seul comme le dit Cantador.

Mais je ne sais pas si cela répond bien à ta question...
A+
0
cavalier2400 Messages postés 120 Date d'inscription mardi 8 juillet 2008 Statut Membre Dernière intervention 1 décembre 2010 1
22 juil. 2009 à 19:37
Bonsoir, tu peux citer le champ auto-incrémenté, en lui affectant une valeur qui ne crée de problème avec l'index(supérieur) la valeur sera accepté, et une réserve de valeur et faite...


BSR
0
rinahlandry# Messages postés 2 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 10 juillet 2017
10 juil. 2017 à 09:20
salut a vous.quelqu’un peut m'aider.j'ai une table,6champs,NOM/PRENOM/NUMagence/NUMdebut/NUMfin
exemple:
NOM:rinah
PRENOM:landry
NUMagence:0023
NUMdebut:1000
NUMfin:1100
j'aimerais afficher en boucle NUMdebut jusqu’à NUMfin dans une champs creer.cette a dire
champs creer remplie des:1000,1001,1002,1003... jusqu'a 10100
merci pour votre aide
0
vico8000 Messages postés 287 Date d'inscription lundi 18 janvier 2016 Statut Membre Dernière intervention 14 février 2018 2
21 juil. 2017 à 11:06
Bonjour,

Évites de détérer des sujets que ont 8 ans la prochaine fois et recréé en un nouveau ;)

Pour ta question :
CommandeSQL := '(Select NumDebut From 'ta_table');';
AdoQuery.SQL.ADD;
AdoQuery.Open;
VarNumDebut := AdoQuery.fields[3].asInteger;
CommandeSQL := '(Select NumFin From 'ta_table');';
AdoQuery.SQL.ADD;
AdoQuery.Open;
VarNumFin := AdoQuery.fields[3].asInteger;
While VarNumDebut < VarNumFin do
Begin
Memo1.Lines.Add(VarNumDebut);
Inc (VarNumDebut,1);
End;


Si tu veux incrémenter ta valeur dans ta base de données, tu ajoutes une requête Insert dans la boucle While.

Cordialement.
0
Rejoignez-nous