J'ai vainement cherché comment récupérer le code SQL suite à exécution d'une requète.

J'utilise des TIBxxxxx (database,transaction et query), et je n'ai trouvé aucune propriété ou méthode pour accéder à SQLCode.

La lecture attentive de la doc IB (API guide) m'a fait remarqué .

L'utilisation de cette fonction est faite dans l'unité IB.PAS (jusque là, tout va bien )
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
procedure IBDataBaseError;
var
  sqlcode: Long;
  IBErrorCode: Long;
  local_buffer: array[0..IBHugeLocalBufferLength - 1] of char;
  usr_msg: string;
  status_vector: PISC_STATUS;
  IBDataBaseErrorMessages: TIBDataBaseErrorMessages;
begin
  usr_msg := '';
 
  { Get a local reference to the status vector.
    Get a local copy of the IBDataBaseErrorMessages options.
    Get the SQL error code }
  status_vector := StatusVector;
  IBErrorCode := StatusVectorArray[1];
  IBDataBaseErrorMessages := GetIBDataBaseErrorMessages;
  sqlcode := isc_sqlcode(status_vector);
  ...............
Singe voit, singe fait : je prends les quelques lignes qui m'intéressent dans cette proc pour me faire 1 fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
Function GetSQLCode:LongInt;
var
  sqlcode: Long;        // type défini comme LongInt dans IBheader
  IBErrorCode: Long;
  status_vector: PISC_STATUS;
 begin
    status_vector := StatusVector;
    IBErrorCode := StatusVectorArray[1];
    sqlcode := isc_sqlcode(status_vector);
    result:=sqlcode;
end;
que j'ai implantée dans un TcustomerData (MonUnit)

Mais, ça ne compile pas:
motif: types incompatibles MonUnit.integer et IB.integer
sur la ligne
status_vector := StatusVector;
et je ne vois pas pourquoi !

En désespoir de cause, j'ai mis ce même code dans IB.pas (là, c'est OK), mais je ne suis bien sûr pas satisfait de cette solution...

Qui peut m'éclairer sur mon erreur ?

Les sources IB* sont consultables ICI