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 (aerrorsqlite_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.
