Insert avec autoincrément sous Delphi

Signaler
Messages postés
20
Date d'inscription
mardi 13 mai 2008
Statut
Membre
Dernière intervention
21 août 2009
-
Messages postés
287
Date d'inscription
lundi 18 janvier 2016
Statut
Membre
Dernière intervention
14 février 2018
-
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

Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
14
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
Messages postés
20
Date d'inscription
mardi 13 mai 2008
Statut
Membre
Dernière intervention
21 août 2009

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...
Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
14
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
Messages postés
20
Date d'inscription
mardi 13 mai 2008
Statut
Membre
Dernière intervention
21 août 2009

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.
Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
14
content que ça marche

cantador
Messages postés
120
Date d'inscription
mardi 8 juillet 2008
Statut
Membre
Dernière intervention
1 décembre 2010
1
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.
Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
14
@cavalier2400:
merci de refaire un post

cantador
Messages postés
20
Date d'inscription
mardi 13 mai 2008
Statut
Membre
Dernière intervention
21 août 2009

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+
Messages postés
120
Date d'inscription
mardi 8 juillet 2008
Statut
Membre
Dernière intervention
1 décembre 2010
1
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
Messages postés
2
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
10 juillet 2017

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
Messages postés
287
Date d'inscription
lundi 18 janvier 2016
Statut
Membre
Dernière intervention
14 février 2018
2
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.