Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQLLite [Delphi, Windows]


KingMidas ©   (2006-02-15 14:15:00) 

Люди! У кого-нибудь есть модуль для работы с SQLLite v3 (на bonanzas.rinet.ru лежит для 2.8). Очень надо!


KingMidas   (2006-02-17 11:53:00) [1]

Спасибо Андрею и Thaddy


Андрей   (2006-02-16 18:27:00) [2]

KingMidas, извини, забыл. Я его (MkSqLite3api) правил немножко под себя
--- так было
type

ppchar=^pchar;
ppvalue=^pvalue;
pvalue=pointer;

--- а так у меня
type

apchar = array [0..0] of pchar;
ppchar=^ apchar;
ppvalue=^pvalue;
pvalue=pointer;
---
Т.е. ppchar это ссылка на массив. Разумеется, проверка индексов выключена.
Но с другой стороны, можешь массив заведомо большой указать[0..64000], это же просто описание типа.

Собиралось все на D6


KingMidas   (2006-02-15 22:42:00) [3]

Thaddy, а пример можно ?


Thaddy   (2006-02-15 21:36:00) [4]

And
http://www.thaddy.com/kolsqlite3table3.pas


Thaddy   (2006-02-15 21:32:00) [5]

This failed, because it was too big.
Here's a link
http://www.thaddy.com/kolsqlite3.pas


Thaddy   (2006-02-15 20:53:00) [6]

function SQLite3_BindBlob(hStmt: TSqliteStmt; ParamNum: integer;
 ptrData: pointer; numBytes: integer; ptrDestructor: pointer): integer;
cdecl; external 'sqlite3.dll' name 'sqlite3_bind_blob';

function SQLiteFieldType(SQLiteFieldTypeCode: Integer): AnsiString;
function SQLiteErrorStr(SQLiteErrorCode: Integer): AnsiString;

implementation
uses kol;

function SQLiteFieldType(SQLiteFieldTypeCode: Integer): AnsiString;
begin
 case SQLiteFieldTypeCode of
   SQLITE_INTEGER: Result := 'Integer';
   SQLITE_FLOAT: Result := 'Float';
   SQLITE_TEXT: Result := 'Text';
   SQLITE_BLOB: Result := 'Blob';
   SQLITE_NULL: Result := 'Null';
 else
   Result := 'Unknown SQLite Field Type Code "' + Int2Str(SQLiteFieldTypeCode) + '"';
 end;
end;

function SQLiteErrorStr(SQLiteErrorCode: Integer): AnsiString;
begin
 case SQLiteErrorCode of
   SQLITE_OK: Result := 'Successful result';
   SQLITE_ERROR: Result := 'SQL error or missing database';
   SQLITE_INTERNAL: Result := 'An internal logic error in SQLite';
   SQLITE_PERM: Result := 'Access permission denied';
   SQLITE_ABORT: Result := 'Callback routine requested an abort';
   SQLITE_BUSY: Result := 'The database file is locked';
   SQLITE_LOCKED: Result := 'A table in the database is locked';
   SQLITE_NOMEM: Result := 'A malloc() failed';
   SQLITE_READONLY: Result := 'Attempt to write a readonly database';
   SQLITE_INTERRUPT: Result := 'Operation terminated by sqlite3_interrupt()';
   SQLITE_IOERR: Result := 'Some kind of disk I/O error occurred';
   SQLITE_CORRUPT: Result := 'The database disk image is malformed';
   SQLITE_NOTFOUND: Result := '(Internal Only) Table or record not found';
   SQLITE_FULL: Result := 'Insertion failed because database is full';
   SQLITE_CANTOPEN: Result := 'Unable to open the database file';
   SQLITE_PROTOCOL: Result := 'Database lock protocol error';
   SQLITE_EMPTY: Result := 'Database is empty';
   SQLITE_SCHEMA: Result := 'The database schema changed';
   SQLITE_TOOBIG: Result := 'Too much data for one row of a table';
   SQLITE_CONSTRAINT: Result := 'Abort due to contraint violation';
   SQLITE_MISMATCH: Result := 'Data type mismatch';
   SQLITE_MISUSE: Result := 'Library used incorrectly';
   SQLITE_NOLFS: Result := 'Uses OS features not supported on host';
   SQLITE_AUTH: Result := 'Authorization denied';
   SQLITE_FORMAT: Result := 'Auxiliary database format error';
   SQLITE_RANGE: Result := '2nd parameter to sqlite3_bind out of range';
   SQLITE_NOTADB: Result := 'File opened that is not a database file';
   SQLITE_ROW: Result := 'sqlite3_step() has another row ready';
   SQLITE_DONE: Result := 'sqlite3_step() has finished executing';
 else
   Result := 'Unknown SQLite Error Code "' + Int2Str(SQLiteErrorCode) + '"';
 end;
end;
function ColValueToStr(Value: PChar): AnsiString;
begin
 if (Value = nil) then
   Result := 'NULL'
 else
   Result := Value;
end;
end.


KingMidas   (2006-02-15 20:02:00) [7]

to Андрей:
Андрей, под какой версией компилировалась эта программа ?
У меня на D7 не идет - ругается на строку:
Writeln(names[i],'=',values[i]);
Видимо правильно так:
Writeln(names^,'=',values^);
Но выводится только первый столбец БД.
Подскажите пожалуйста, как должно быть ?


Андрей   (2006-02-15 17:46:00) [8]

Собственно, это не совсем относится к KOL, но можно пойти и другим путем
возьми, например это
http://sqlite.org/contrib/download/mksqlite.zip?get=2
и используй из него только MkSqLite3api.

Вот минимальная прога в моем исполнении:

{$APPTYPE CONSOLE}
uses MkSqLite3api;

function DataTaker(user:pointer; ncols:integer; values:ppchar; names:ppchar):integer; cdecl;
var i: integer;
begin
writeln('------------ fields:',ncols);
DataTaker:=0;
for i:=0 to ncols-1 do begin
 Writeln(names[i],'=',values[i]);
end;
end;

var
db: pointer;
err: integer;

begin
CheckSqliteLoaded;
err:=sqlite3_open('test.db3',db);
if err<>SQLITE_OK then begin
 Writeln('Error opening database:',sqlite3_errmsg(db));
 exit;
end;
sqlite3_exec(db,'select * from testing',DataTaker,nil,nil);
sqlite3_close(db);
end.


Вот ее вывод:
------------ fields:3
f1=0
f2=1
f3=test1
------------ fields:3
f1=0
f2=2
f3=test2

А вот как была создана эта таблица:
BEGIN TRANSACTION;
CREATE TABLE testing (f1 integer, f2 integer, f3 char(50));
INSERT INTO testing VALUES(0,1,'test1');
INSERT INTO testing VALUES(0,2,'test2');
COMMIT;


RA   (2006-02-15 14:42:00) [9]

Есть здесь http://www.thaddy.com/
Но она бэта.


Наверх

Титульная страница Поиск, карта сайта Написать письмо