Главная страница
    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.47 MB
Время: 0.046 c
11-1140002148
KingMidas
2006-02-15 14:15
2006.12.03
SQLLite


2-1163416043
TrainerOfDolphins
2006-11-13 14:07
2006.12.03
Отмена действия


2-1163538396
Zanci
2006-11-15 00:06
2006.12.03
Про юзов


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


1-1161708596
carmen
2006-10-24 20:49
2006.12.03
Создание dbgrideh на листе tabsheet компонента pagecontrol





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский