Пример по созданию таблиц в sqlite. Кусок из рабочего проекта
Код: Выделить всё
uses ...sqlite3;
function MyCallback(_para1: pointer; plArgc: longint; argv: PPchar;
argcol: PPchar): longint; cdecl;
var
i: integer;
PVal, PName: ^PChar;
begin
PVal := argv;
PName := argcol;
for i := 0 to plArgc - 1 do
begin
Inc(PVal);
Inc(PName);
end;
Result := 0;
end;
procedure Create_tbl_UserStatusList(sqlite : Psqlite3; aSQL, ErrMsg: AnsiString);
var
rc : integer;
begin
aSql := 'BEGIN TRANSACTION; ';
aSql := aSql + 'CREATE TABLE tbl_UserStatusList ('
+ 'StatusID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, '
+ 'StatusName VARCHAR(20) NOT NULL UNIQUE);';
aSql := aSql + 'COMMIT TRANSACTION;';
rc := sqlite3_exec(sqlite, PChar(ASql), @MyCallback, nil, @ErrMsg);
if rc <> SQLITE_OK then
MessageDlg(DBError, Format(CreateTblError, ['tbl_UserStatusList'])
+ #13#10 + ErrMsg, mtError, [mbOK], 0);
aSql := 'BEGIN TRANSACTION;';
aSQL := aSql + 'INSERT INTO tbl_UserStatusList VALUES (1, ''действует'');';
aSql := aSql + 'INSERT INTO tbl_UserStatusList VALUES (2, ''заблокирован'');';
aSql := aSql + 'COMMIT TRANSACTION;';
rc := sqlite3_exec(sqlite, PChar(ASql), @MyCallback, nil, @ErrMsg);
if rc <> SQLITE_OK then
MessageDlg(DBError, Format(InsertError, ['tbl_UserStatusList'])
+ #13#10 + ErrMsg, mtError, [mbOK], 0);
end;
procedure CreateTableStructure;
var
sqlite: Psqlite3;
rc: integer;
aSQL, ErrMsg: AnsiString;
begin
DBPath := GetDBPath; //путь к файлу БД
aSQL := '';
ErrMsg := '';
if UTF8Length(DBPath) > 4 then
begin
rc := sqlite3_open(PChar(DBPath), @sqlite);
if rc <> SQLITE_OK then
MessageDlg(DBError, Format(OpenDbError, [DBPath]), mtError, [mbOK], 0);
try
Create_tbl_UserStatusList(sqlite, aSQL, ErrMsg);
finally
sqlite3_close(sqlite);
end;
end;
end;