Bonjour à tous, Je développe un projet perso de gestion d'un club sous Lazarus=1.0.6/FPC=2.6.0 environnement Linux Mint (nadia) 14 Edition Mate 64-bit. dans une Database Postgresql V9.1.2
Voilà quelques jours où je me prends le chou pour faire avancer ce programme.
J'ai plusieurs tables, dans une fenêtre de configuration je cherche à récupérer le numéro du dernier INSERT
structure de ma base Banque
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
CREATE TABLE "TBanques"
(
  "Banques_ID" serial NOT NULL,
  "Banques_Nom" character varying(24),
  "Banques_CdeBank" character varying(5),
  "Banques_CdeGuichet" character varying(5),
  "Banques_Adr1" character varying(60),
  "Banques_Adr2" character varying(60),
  "Banques_LieuDit" character varying(60),
  "Banques_CP_ID" integer NOT NULL,
  CONSTRAINT "pkBanques" PRIMARY KEY ("Banques_ID" ) )
 
procedure  prepQryBank;
var
  sCmdQryBank : string;
 
begin
  {------------------[Table Banques]------------------}
  sCmdQryBank := '"TBanques"'+
    ' ("Banques_ID", "Banques_Nom", "Banques_CdeBank", "Banques_CdeGuichet",'+
    ' "Banques_Adr1", "Banques_Adr2", "Banques_CP_ID")'+
    ' VALUES (DEFAULT,:pBanques_Nom, :pBanques_CdeBank, :pBanques_CdeGuichet,'+
    '  :pBanques_LieuDit,'+
    ' :pBanques_Adr1, :pBanques_Adr2, :pBanques_CP_ID) RETURNING "Banques_ID"'+';';
 
    With dmDonneesApp.sqlqBanques do
    begin
      Close;
 
       sCommand := TransCmdeQry + StartCmdeQry + sCmdQryBank
 
      //sCommand := StartCmdeQry + sCmdQryBank;
      SQL.Text := sCommand;
    end; //With dmDonneesApp.sqlqBanques
end;
 
procedure ExecQryBank;
begin
    With dmDonneesApp.sqlqBanques do
    begin
      ParamByName('pBanques_Nom').AsString       := leBanques_Nom.Text;
      ParamByName('pBanques_CdeBank').AsString   := leClub_Cdebank.Text;
      ParamByName('pBanques_CdeGuichet').AsString:= leClub_CdeGuichet.Text;
      ParamByName('pBanques_LieuDit').AsString   := leBanques_LieuDit.Text;
      ParamByName('pBanques_Adr1').AsString      := leBanques_Adr1.Text;
      ParamByName('pBanques_Adr2').AsString      := leBanques_Adr2.Text;
      ParamByName('pBanques_CP_ID').AsInteger    := ACPID_Bank;
      ExecSQL;
 
      //close;
      //SQL.Text := 'SELECT CURRVAL("Banques_ID") From "TBanques"';
      //ExecSQL;
 
      AADr_Bank_ID := FieldByName('Banques_ID').AsInteger;
    end; //With dmDonneesApp.sqlqBanques
end;
sur Click Bouton OK
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
   prepQryBank; 
   ExecQryBank;
J'ai d'abord essayé de récupérer l'offset par :
  • la clause RETURNING + ... AADr_Bank_ID := ...
    j'obtiens le message EDatabaseError sqlqBanques : Field not found : "Banques_ID"
  • la commande CURRVAL en enlevant la clause RETURNING puis en décommentant les 3 lignes et
    enfin en commentant AADr_Bank_ID :=...
    J'obtiens l'erreur suivant
    EDatabaseError pqConnectDB : Execution of query failed (PostgreSQL: ERREUR: could not open relation with OID 7


j'ai parcouru plusieurs forums, ne parvenant à régler ce problème central je me tourne vers les spécialistes ou un user ayant eu ce cas de figure sur ce forum pour m'aider à m'en sortir.
Ce sujet a été traité sur Developpez.net mais ne fonctionne pas pour moi. Comment contourner alors si possible.

Merci d'avance à ceux qui se donneront la peine de me répondre.

Daniel