[fpc-pascal] Sqlite error sqlite3_extended_errcode SIGSDEV (better format)
Santiago A.
svaa at ciberpiula.net
Wed Mar 14 18:50:57 CET 2018
Hello:
I had problems with Sqlite3 it raised SIGSDEV exception, but I think it
worked with FPC 2.6.4 from Lazarus 1.6. (not sure because It is a new
PC, but with 1.8.0) . Finally I have found where the problem is.
The problem is in sqlite3conn.pp:
procedure TSQLite3Connection.checkerror(const aerror: integer);
Var
ErrMsg : String;
ErrCode : integer;
begin
if (aerror<>sqlite_ok) then
begin
ErrMsg := strpas(sqlite3_errmsg(fhandle));
ErrCode :=sqlite3_extended_errcode(fhandle); // <========== here is the problem
raise ESQLDatabaseError.CreateFmt(ErrMsg, [], Self, ErrCode, '');
end;
end;
The problem is that sqlite3_extended_errcode is not a regular function,
is a pointer to a function, and it is nil.
So I added:
if assigned(sqlite3_extended_errcode) then
ErrCode :=sqlite3_extended_errcode(fhandle);
else
ErrCode := 0;
Why is sqlite3_extended_errcode nil? It is assigned in sqlite.inc as a
pointer to a function of sqlite3.dll.
pointer(sqlite3_extended_errcode) :=
GetProcedureAddress(LibHandle,'sqlite3_extended_errcode');
I downloaded the last version of sqlite3.dll and now it works. Was my
dll corrupted or was too old and hadn't such entry?. Nevertheless, I
think this check of nil should be done, or check the version and rise
"Not valied for this version". A SIGSDEV may drive you nuts.
--
Saludos
Santiago A.
More information about the fpc-pascal
mailing list