Insert avec autoincrément sous Delphi

DenisPhil 20 Messages postés mardi 13 mai 2008Date d'inscription 21 août 2009 Dernière intervention - 19 juil. 2009 à 22:53 - Dernière réponse : vico8000 291 Messages postés lundi 18 janvier 2016Date d'inscription 14 février 2018 Dernière intervention
- 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 

11 réponses

Répondre au sujet
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 20 juil. 2009 à 17:23
0
Utile
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
DenisPhil 20 Messages postés mardi 13 mai 2008Date d'inscription 21 août 2009 Dernière intervention - 20 juil. 2009 à 20:42
0
Utile
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
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 20 juil. 2009 à 22:45
0
Utile
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
DenisPhil 20 Messages postés mardi 13 mai 2008Date d'inscription 21 août 2009 Dernière intervention - 20 juil. 2009 à 23:12
0
Utile
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
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 21 juil. 2009 à 11:54
0
Utile
content que ça marche

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

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