Форум: "KOL";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "KOL";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.05 c