FirebirdSQL / firebird

Firebird server, client and tools
https://www.firebirdsql.org/
1.23k stars 213 forks source link

Using firebird 3/4 with qt driver qibase or qodbc: every db call throws status_exception #7491

Open timehrlich90 opened 1 year ago

timehrlich90 commented 1 year ago

I tried using firebird 3 and 4 with qt. I can open the db and access / write data. But every database access throws a Exception thrown at 0x00007FFAD37DD759 in Nbx2Service.exe: Microsoft C++ exception: Firebird::status_exception at memory location 0x0000000906AFD8C0.

I am using qt 5.14.2 x64 and recompiled the qt sql driver with the fitting firebird version for both firebird 3 and 4.

aafemt commented 1 year ago

Public full call stack, please, with function names. Normally status_exception is caught and handled in fbclient.dll returning a proper error message from API.

timehrlich90 commented 1 year ago

sorry if i did not provide enough informations. not sure if i get it right, now. but i hope so. i could find out that one exception is thrown when isc_attach_database is called: isc_attach_database({0xcdcdcdcdcdcdcdcd, 0xcdcdcdcdcdcdcdcd, 0xcdcdcdcdcdcdcdcd, 0xcdcdcdcdcdcdcdcd, 0xcdcdcdcdcdcdcdcd, 0xcdcdcdcdcdcdcdcd, 0xcdcdcdcdcdcdcdcd, 0xcdcdcdcdcdcdcdcd,0xcdcdcdcdcdcdcdcd, 0xcdcdcdcdcdcdcdcd, 0xcdcdcdcdcdcdcdcd, 0xcdcdcdcdcdcdcdcd,0xcdcdcdcdcdcdcdcd, 0xcdcdcdcdcdcdcdcd, 0xcdcdcdcdcdcdcdcd, 0xcdcdcdcdcdcdcdcd,0xcdcdcdcdcdcdcdcd, 0xcdcdcdcdcdcdcdcd, 0xcdcdcdcdcdcdcdcd, 0xcdcdcdcdcdcdcdcd}, 0, "127.0.0.1:D:/p4client/Software/KBA01/Main/kbaplatform/NBXService/bin/Nbx2Service/x64/Debug/DB/nbx2db.fdb", 0x00000000, 0x00000021, {0x0001 0x001c 0x0006 SYSDBA 0x001d 0x0009 masterkey0 0x000b UNICODE_FSS})

but the main problem are the other exceptions, thrown when fetching blobs via isc_get_segment: isc_get_segment({0x0000000000000001, 0x0000000000000000, 0x0000000000000000, 0xcdcdcdcdcdcdcdcd, 0xcdcdcdcdcdcdcdcd, 0xcdcdcdcdcdcdcdcd,0xcdcdcdcdcdcdcdcd,0xcdcdcdcdcdcdcdcd,0xcdcdcdcdcdcdcdcd,0xcdcdcdcdcdcdcdcd,0xcdcdcdcdcdcdcdcd,0xcdcdcdcdcdcdcdcd,0xcdcdcdcdcdcdcdcd,0xcdcdcdcdcdcdcdcd,0xcdcdcdcdcdcdcdcd,0xcdcdcdcdcdcdcdcd,0xcdcdcdcdcdcdcdcd,0xcdcdcdcdcdcdcdcd,0xcdcdcdcdcdcdcdcd,0xcdcdcdcdcdcdcdcd }, 0x00000002, 0x00d0, 0x00003fff, 0x0000017291a437f8 )

hope this helps. otherwise please try to explain how i can get the data you need!

timehrlich90 commented 1 year ago

the problem appears when i recall isc_get_segment although i already got the whole segment. i have blobs of the size of ~220 bytes. so i get the whole data when i call isc_get_segment the first time. but the while loop from qt driver calls it a second time to break the loop: while (isc_get_segment(status, &handle, &len, chunkSize, ba.data() + read) == 0 || status[1] == isc_segment) { read += len; ba.resize(read + chunkSize); if (len < chunkSize && status[1] != isc_segment) break; } the second call throws the exception.

hvlad commented 1 year ago

Probably, this could help