Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
3-1159279225
Itonix
2006-09-26 18:00
2006.12.03
Динамический запрос


6-1152854738
Yeg
2006-07-14 09:25
2006.12.03
Фунция KoiToWin и сообщение с аттачем


2-1163394280
Lebedev
2006-11-13 08:04
2006.12.03
Можно ли регулировать положение текста (caption) TPanel?


2-1163686957
KyRo
2006-11-16 17:22
2006.12.03
Не сробатывает событие таймера !


2-1163406326
Panaev
2006-11-13 11:25
2006.12.03
Подключение БД из сети





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский