Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/02/2005, 11h14   #1
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Par défaut [IB6] Code SQL.

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 :
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 :
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
Citation:
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
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2005, 12h21   #2
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
C'est plus un probleme Delphi, mais je pense que dans votre unité il y a également une redéfinition d'un type utilisé dans le ISCStatus.

Peut etre en metant le uses IBExternals en premier dans votre liste celà passera mieux.

Ou si celà ne marche pas j'essayerai :

Code :
1
2
3
4
5
6
7
8
9
uses
  {$IFDEF MSWINDOWS}
    Windows,
  {$ENDIF}
  {$IFDEF LINUX}
   Libc,
  {$ENDIF}
  SysUtils, Classes, IBHeader,
  IBExternals, IBUtils, DB, IBXConst, ....... vos uses
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h19.


 
 
 
 
Partenaires

Hébergement Web