Insert avec autoincrément sous Delphi

Messages postés
20
Date d'inscription
mardi 13 mai 2008
Dernière intervention
21 août 2009
- - Dernière réponse : vico8000
Messages postés
291
Date d'inscription
lundi 18 janvier 2016
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
Afficher la suite 

Votre réponse

11 réponses

Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
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
Commenter la réponse de cs_cantador
Messages postés
20
Date d'inscription
mardi 13 mai 2008
Dernière intervention
21 août 2009
0
Merci
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...
Commenter la réponse de DenisPhil
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
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
Commenter la réponse de cs_cantador
Messages postés
20
Date d'inscription
mardi 13 mai 2008
Dernière intervention
21 août 2009
0
Merci
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.
Commenter la réponse de DenisPhil
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
content que ça marche

cantador
Commenter la réponse de cs_cantador
Messages postés
126
Date d'inscription
mardi 8 juillet 2008
Dernière intervention
1 décembre 2010
0
Merci
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.
Commenter la réponse de cavalier2400
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
@cavalier2400:
merci de refaire un post

cantador
Commenter la réponse de cs_cantador
Messages postés
20
Date d'inscription
mardi 13 mai 2008
Dernière intervention
21 août 2009
0
Merci
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+
Commenter la réponse de DenisPhil
Messages postés
126
Date d'inscription
mardi 8 juillet 2008
Dernière intervention
1 décembre 2010
0
Merci
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
Commenter la réponse de cavalier2400
Messages postés
2
Date d'inscription
lundi 3 juillet 2017
Dernière intervention
10 juillet 2017
0
Merci
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
Commenter la réponse de rinahlandry#
Messages postés
291
Date d'inscription
lundi 18 janvier 2016
Dernière intervention
14 février 2018
0
Merci
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.
Commenter la réponse de vico8000

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.