Bonjour,

Dans une application un peu ancienne, développée avec Delphi 7, j'utilise les composants ZeosDBO version 6. 6.

Lors d'une demande de mise à jour par le client, j'ai décidé de passer vers ZeosDBO version 7. 04 ou 7. 05.

Là, je me suis trouvé devant une difficulté que je n'ai pas résolue à ce jour.

Voilà ma problème :

J'ai une table - Table1 (Id, Nom1, Nom2), il s'agit d'un exemple.

L'insertion d'un nouvel enregistrement se fait avec la requête
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
Insert Into Table1 (Nom1, Nom2) Values (:Nom1, :Nom2) RETURNING ID ;

L'index est généré en automatique par un déclencheur.

Avec la version 6. 6, j'avais mis en place une fonction pour récupérer l'index
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
function f_LireReturning(pQry: TZQuery): Integer;
begin
  with pQry do
  begin
    DbcResultSet.First;
    Result := DbcResultSet.GetLong(1);
  end;
end;
J'avais trouvé cette approche sur le forum ZeosLib pour firebird. L'exemple était pour la version Firebird 2.1.2, mais fonctionne parfaitement avec la version 2.5.

Les modifications à faire, dans les sources des composants, étaient :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
in unit ZAbstractRODataset line 1426:
 
FRowsAffected := Statement.ExecuteUpdatePrepared;
//returns an integer
 
replace with:
 
if Statement.ExecutePrepared then
//returns true if there is a valid resultset
   FResultset := Statement.GetResultSet;
FRowsAffected := Statement.GetUpdateCount;
Le code pour récupérer l'index qui venait d'être créé avec la nouvelle insertion était :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
ZQuery.Close;
ZQuery.Sql.Clear;
ZQuery.Sql.Add('insert into personen (naam, voornaam) values (:naamparam, :voornaamparam) returning idnummer');
ZQuery.ParamByName('naamparam').Value:= PrivenaamEdit.Text;
ZQuery.ParamByName('voornaamparam').Value:= PrivevoornaamEdit.Text;
ZQuery.ExecSQL;
 
ZQuery.DbcResultSet.First;
myNewId := ZQuery.DbcResultSet.GetLong(1);
Or, cette modification ne fonctionne pas avec la version ZeosDBO version 7. 04.

Je suppose qu'il doit exister une possibilité de récupérer cette index et qu'elle est prévue dans les composants modifiés de la version 7.04.

Personnellement, je n'ai pas trouvé. Si quelqu'un a la solution, je le remercie de bien vouloir me la communiquer.

Sinon, il ne me restera deux alternatives - Continuer avec ZeosDBO version 6. 6 qui répond à ma demande ou me plonger dans les sources de la version 7.04 afin de trouver la solution.

Merci d'avance de votre aide

A+