Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: CL | DM;

Вниз

SQLLite   Найти похожие ветки 

 
KingMidas   (2006-02-15 14:15) [0]

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


 
RA ©   (2006-02-15 14:42) [1]

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


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

Собственно, это не совсем относится к 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;


 
KingMidas   (2006-02-15 20:02) [3]

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


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

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.


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

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


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

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


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

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


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

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-17 11:53) [9]

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



Страницы: 1 вся ветка

Текущий архив: 2006.12.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.072 c
5-1144670521
james25
2006-04-10 16:02
2006.12.03
создание составных компонентов


2-1163406956
TrainerOfDolphins
2006-11-13 11:35
2006.12.03
Хранение настроек приложения в файле


3-1159527050
Sergey13
2006-09-29 14:50
2006.12.03
Оракл. DBLink на саму себя


3-1159279225
Itonix
2006-09-26 18:00
2006.12.03
Динамический запрос


1-1161243455
pyJIoH
2006-10-19 11:37
2006.12.03
Выгрузка данных в XML. Создание файла TFileStream ом.