J'essayé d'obtenir le No d'enregistrement après insertion de plusieurs données dans une table d'une base de données (Access 2000), table qui porte le nom DOSSIER.
Dans l'extrait de mon programme suivant .....
il se produit une erreur sur la ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 //Création d'un nouveau enregistrement dans la table DOSSIER (local) ADOTable1.TableName := 'DOSSIER'; adosqlcommand1.Clear; ADOQuery1.SQL.Clear; adosqlcommand1.Add('INSERT INTO DOSSIER (DOS_EMPR_NOM, DOS_EMPR_PRENOM, CIV_ID)' + ' VALUES(''' + CreationKey + ''',''test'',' + '1' +');'); AdoQuery1.SQL.Text := adosqlcommand1.Text; try AdoQuery1.ExecSQL; except { A faire : traitement d'erreur } end; AdoQuery1.Close; //Lancer une requête pour récupérer la clé de la table DOSSIER (Champ DOS_ID) ADOTable1.TableName := 'DOSSIER'; adosqlcommand1.Clear; ADOQuery1.SQL.Clear; adosqlcommand1.Add('SELECT (DOS_EMPR_NOM) from DOSSIER' +' WHERE (DOS_EMPR_NOM=''' + 'xp9000creationkey' + ''');'); AdoQuery1.SQL.Text := adosqlcommand1.Text; try AdoQuery1.Open; except { A faire : traitement d'erreur } end; try //Obtenir le No de l'enregistrment Edit1.Text := IntToStr(AdoQuery1.RecordCount); while not ADOQuery1.EOF do begin // Et voila la ligne suivante qui fait planter mon programme. DOS_ID := ADOQuery1.Fields.FieldByName('DOS_ID').AsInteger; ADOQuery1.Next; end; AdoQuery1.Close; except { A faire : traitement d'erreur } end;
avec le message suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 DOS_ID := ADOQuery1.Fields.FieldByName('DOS_ID').AsInteger;
Explication : DOS_ID est la clé primaire de la table DOSSIER. C'est une clé auto-incrémenté, et elle existe bien dans la table contrairement à ce que le message dit!
Ma question : Comment éviter cette erreur:
Merci d'avance pour votre aide.![]()
Partager