Hello
Ayant installé récemment la dernière version de Firebird (2.5), je me suis naturellement intéressé au système de trace qu'offre celle-ci.
Je provoque malheureusement un crash du serveur lors de l'exécution de 2 requêtes consécutives au sein du même composant TUIBQuery.
Avec la base exemple EMPLOYEE, un test très simple sous Delphi:
Code Delphi : 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 procedure TFormTest.ButtonTestDynClick(Sender: TObject); begin with TUIBQuery.Create(UIBTransaction1) do try SQL.Text := 'INSERT INTO COUNTRY (COUNTRY, CURRENCY) VALUES (?, ?);'; Prepare; Close(etmCommit); // finally // Free; // end; // with TUIBQuery.Create(UIBTransaction1) do // try SQL.Text := 'UPDATE COUNTRY SET COUNTRY = ?, CURRENCY = ? WHERE COUNTRY = ?;'; Prepare; Close(etmCommit); finally Free; end; end;
L'exécution de ce code provoque ces erreurs:
Puis, qui découle naturellement de la 1°:Le projet ProjTest.exe a déclenché la classe d'exception EUIBError avec le message 'unknown ISC error 0
Error Code: 401'.
Firebird.log:Le projet ProjTest.exe a déclenché la classe d'exception EUIBError avec le message 'invalid statement handle
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements
Error Code: 165'.
Bien entendu le Trace Log est interrompu sur le 2° prepare :PORTABLEASUS (Client) Thu Nov 04 18:38:08 2010
INET/inet_error: read errno = 10054
PORTABLEASUS (Client) Thu Nov 04 18:38:08 2010
REMOTE INTERFACE/gds__detach: Unsuccesful detach from database.
Uncommitted work may have been lost
Le fait de décommenter les lignes (donc un Free sur le composant puis recréation), ou d'arrêter le système de trace, ne pose plus de problème.2010-11-04T18:38:05.3670 (3896:0120E01C) PREPARE_STATEMENT
EMPLOYEE (ATT_62, SYSDBA:NONE, NONE, TCPv4:127.0.0.1)
D:\Travaux\FirebirdBug\ProjTest.exe:4964
(TRA_698, READ_COMMITTED | REC_VERSION | NOWAIT | READ_WRITE)
Statement 77:
-------------------------------------------------------------------------------
UPDATE COUNTRY SET COUNTRY = ?, CURRENCY = ? WHERE COUNTRY = ?;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PLAN (COUNTRY INDEX (RDB$PRIMARY1))
0 ms
A votre avis: UIB ou Firebird en cause ?
@+ Claudius
Partager