Używam sterownika DbExpress do SQLite z tej strony: http://www.bcp-software.nl/artikelen/sqlite.html
Mam taki kodzik:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
SqlExpr;
var
SQLConnection: TSQLConnection;
SQLDataSet: TSQLDataSet;
begin
try
DeleteFile('database.db');
SQLConnection := TSQLConnection.Create(nil);
with SQLConnection do
begin
DriverName := 'SQLite';
LibraryName := 'DbxSQLite3.dll';
GetDriverFunc := 'getSQLDriverSQLite3';
VendorLib := 'sqlite3.dll';
Params.Add('Database=database.db');
Params.Add('RoleName=Cache=2000|TextLength=1024|CanCreateDb=True');
LoginPrompt := False;
Connected := True; //pierwszy wyjątek <-------------------------------------------------------------------
end;
if not SQLConnection.Connected then
begin
WriteLn('nie udalo sie nawiazac polaczenia z baza danych');
Exit;
end;
SQLConnection.ExecuteDirect(
'CREATE TABLE tabela(indeks INTEGER);' +
'INSERT INTO tabela(indeks) VALUES(1);' +
'INSERT INTO tabela(indeks) VALUES(2);' +
'INSERT INTO tabela(indeks) VALUES(3);'
);
SQLDataSet := TSQLDataSet.Create(nil);
SQLDataSet.SQLConnection := SQLConnection;
SQLDataSet.CommandText := 'SELECT * FROM tabela';
SQLDataSet.Active := True; //kolejne wyjątki <-------------------------------------------------------------------
if not SQLDataSet.Active then
begin
WriteLn('nie udalo sie aktywować SQLDataSet');
Exit;
end;
except
on E: Exception do
WriteLn(E.ClassName + ': "' + E.Message + '"');
else
WriteLn('zlapalem inny wyjatek');
end;
if SQLDataSet <> nil then SQLDataSet.Free;
if SQLConnection <> nil then SQLConnection.Free;
Write('KONIEC'); ReadLn;
end.
Wyjście:EDatabaseError: "dbExpressError: Unknown Error Code: '65535'
code>Wyjście:`EDatabaseError: "dbExpressError: Unknown Error Code: '65535'"
KONIEC
Tworzę nowe połączenie TSQLConnection z bazą SQLite. Podczas łączenia z bazą ("Connected := True;") debugger pokazuje rzucany gdzieś w DLL wyjątek:`EDbxInvalidCall 'Invalid option request in TSQLLiteDriver'`który jest gdzieś wyłapywany i program idzie dalej. Połączenie jest nawiązane i można wysyłać zapytania.
Tworzę nowy TSQLDataSet i podpinam pod połączenie z bazą. Podczas aktywowania ("Active := True;") debugger pokazuje po kolei rzucane gdzieś w DLL wyjątki:
EDbxInvalidCall 'Invalid option passed to TSQLiteConnection.SetOption: 26'
EDatabaseError 'dbExpressError: Unknown Error Code: '256''
EDatabaseError 'dbExpressError: Unknown Error Code: '65535''
Wszystkie są gdzieś wyłapywane w DLL, oprócz tego ostatniego, ostatni przechwytuję ja.
Obydwie DLL'ki pochodzą z jednej paczki pobranej z wymienionej strony i leżą w katalogu programu. Problem jest ten sam na D8 i D10 Turbo, XP i Vista.
Szukałem bezskutecznie innego darmowego sterownika do SQLite i dbExpress. Znacie coś ?