Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2023, 13:34   #1
hexor_boo
Разъяснятор
Форумчанин
 
Аватар для hexor_boo
 
Регистрация: 21.04.2022
Сообщений: 106
Восклицание Delphi 7 - SQLite3 DLL Wrapper - ExecSQL

Всем доброго времени суток!

Делаю так:
Код:
 Procedure CreateNewWin(aFileName : String);
  Var
   strDBPath : String;
   sqlDB     : TSQLiteDatabase;
   sqlTable  : TSQLiteTable;
   strSQL    : String;
   strInsVar : STring;
  Begin
   strDBName:=ExtractFileName(aFileName);
   strDBPath:=ExtractFilePath(Application.ExeName)+'win\'+strDBName;
   sqlDB:=TSQLiteDatabase.Create(strDBPath);
   strSQL:=
    'DROP TABLE IF EXISTS [Images];'+
    'CREATE TABLE [Images]([rowid] INTEGER, [imgName] CHAR, [imgVal] BLOB);'+
    'DROP TABLE IF EXISTS [LPathLines];'+
    'CREATE TABLE [LPathLines]([rowid] INTEGER, [PathLine] CHAR);'+
    'DROP TABLE IF EXISTS [RPathLines];'+
    'CREATE TABLE [RPathLines]([rowid] INTEGER, [PathLine] TEXT);'+
    'DROP TABLE IF EXISTS [Vars];'+
    'CREATE TABLE [Vars]([rowid] INTEGER, [VarName] CHAR, [VarIntVal] '+
    'INTEGER, [VarStrVal] CHAR);';
   strInsVar:=
    'INSERT INTO [Vars]([rowid], [VarName], [VarIntVal], [VarStrVal]) ';
   strSQL:=strSQL+
    strInsVar+'VALUES(1, "WinVer", null, "1.0");'+
    strInsVar+'VALUES(2, "BaloonX", 128, null);'+
    strInsVar+'VALUES(3, "BaloonY", 88, null);'+
    strInsVar+'VALUES(4, "PLineMode", 1, "//0 - Label; 1 - Rich");'+
    strInsVar+'VALUES(5, "PLineX", 242, null);'+
    strInsVar+'VALUES(6, "PLineY", 153, null);'+
    strInsVar+'VALUES(7, "PLineW", 310, null);'+
    strInsVar+'VALUES(8, "PLineH", 57, null);'+
    strInsVar+'VALUES(9, "PLineAlign", 0, "//Left");'+
    strInsVar+'VALUES(10, "PLineVAlign", 1, "//Center");'+
    strInsVar+'VALUES(11, "PLineBgColor", null, "25A2EE");'+
    strInsVar+'VALUES(12, "PLineTextColor", null, "FFFFFF");'+
    strInsVar+'VALUES(13, "PLineTextSize", 9, null);'+
    strInsVar+'VALUES(14, "PLineTextStyle", 1, "//Flags");'+
    strInsVar+'VALUES(15, "PLineTextFont", null, "MS Sans Serif");';
    Try
     sqlDB.BeginTransaction;
     sqlDB.ExecSQL(strSQL);
     sqlDB.Commit;
    Finally
     sqlDB.Free;
    End;
   FindWins;
  End;
Результат: в базе данных нет ни таблиц, ни данных. Что я делаю неправильно?
Вложения
Тип файла: zip SQLite3.zip (301.6 Кб, 0 просмотров)
hexor_boo вне форума Ответить с цитированием
Старый 27.10.2023, 14:09   #2
hexor_boo
Разъяснятор
Форумчанин
 
Аватар для hexor_boo
 
Регистрация: 21.04.2022
Сообщений: 106
Восклицание

Код:
strSQL:=
 'CREATE TABLE [Images]([imgName] CHAR, [imgVal] BLOB);'+
 'CREATE TABLE [LPathLines]([PathLine] CHAR);'+
 'CREATE TABLE [RPathLines]([PathLine] TEXT);'+
 'CREATE TABLE [Vars]([VarName] CHAR, [VarIntVal] '+
 'INTEGER, [VarStrVal] CHAR);';
Попробовал убрать из выражения CREATE TABLE служебное поле [rowid] - создаётся 1-я таблица [Images]. А почему остальные не создаются?

Последний раз редактировалось hexor_boo; 27.10.2023 в 15:28.
hexor_boo вне форума Ответить с цитированием
Старый 27.10.2023, 20:36   #3
hexor_boo
Разъяснятор
Форумчанин
 
Аватар для hexor_boo
 
Регистрация: 21.04.2022
Сообщений: 106
Восклицание Ура!

Код:
//...
Interface
 Uses
  SQLiteTable3, ..., ...;
//...
 Procedure CreateNewWin(aFileName : String);
//...
 Var
   strDBName : String;
//...
Implementation
//...
 Procedure CreateNewWin(aFileName : String);
  Var
   strDBPath : String;
   sqlDB     : TSQLiteDatabase;
   strSQL    : String;
  Begin
   strDBName:=ExtractFileName(aFileName);
   strDBPath:=ExtractFilePath(Application.ExeName)+'win\'+strDBName;
   sqlDB:=TSQLiteDatabase.Create(strDBPath);

    Try
     sqlDB.BeginTransaction;

     strSQL:=
      'CREATE TABLE Images (id INTEGER PRIMARY KEY, imgName CHAR, '+
      'imgVal BLOB);';
     sqlDB.ExecSQL(strSQL);

     strSQL:=
      'CREATE TABLE LPathLines(id INTEGER PRIMARY KEY, PathLine CHAR);';
     sqlDB.ExecSQL(strSQL);

     strSQL:=
      'CREATE TABLE RPathLines(id INTEGER PRIMARY KEY, PathLine TEXT);';
     sqlDB.ExecSQL(strSQL);

     strSQL:=
      'CREATE TABLE Vars(id INTEGER PRIMARY KEY, VarName CHAR, '+
      'VarIntVal INTEGER, VarStrVal CHAR);';
     sqlDB.ExecSQL(strSQL);

     sqlDB.Commit;
    Finally
     sqlDB.Free;
    End;

   //...
  End;
Это работает!!! Все 4 таблицы создаются. Если найду как многострочный SQL-запрос запускать, чтобы отрабатывал - напишу здесь.
hexor_boo вне форума Ответить с цитированием
Старый 27.10.2023, 23:10   #4
hexor_boo
Разъяснятор
Форумчанин
 
Аватар для hexor_boo
 
Регистрация: 21.04.2022
Сообщений: 106
Смех Ликбез

Код:
 Procedure MultiStrSQL(mstrSQL : TStrings);
  Var
   strDBPath : String;
   sqlDB     : TSQLiteDatabase;
   i         : Integer;
  Begin
   strDBPath:=ExtractFilePath(Application.ExeName)+'win\'+strDBName;
   sqlDB:=TSQLiteDatabase.Create(strDBPath);
    Try
     sqlDB.BeginTransaction;
      For i:=0 To mstrSQL.Count-1 Do
       Begin
        sqlDB.ExecSQL(mstrSQL[i]);
       End;
     sqlDB.Commit;
    Finally
     sqlDB.Free;
    End;
  End;
Сам написал. Берём TStrings, наполняем через TStrings.Add, скармливаем этой функции и радуемся жизни)))

Например вот так:
Код:
 Procedure CreateNewWin(aFileName : String);
  Var
   mstrSQL   : TStrings;
   strInsVar : String;
  Begin
   strDBName:=ExtractFileName(aFileName);

   mstrSQL:=TStringList.Create;

   mstrSQL.Add('CREATE TABLE Images (imgName CHAR, imgVal BLOB);');
   mstrSQL.Add('CREATE TABLE LPathLines(PathLine CHAR);');
   mstrSQL.Add('CREATE TABLE RPathLines(PathLine TEXT);');
   mstrSQL.Add(
    'CREATE TABLE Vars(VarName CHAR, VarIntVal INTEGER, VarStrVal CHAR);'
   );

   strInsVar:='INSERT INTO Vars (rowid, VarName, VarIntVal, VarStrVal) VALUES ';

   mstrSQL.Add(strInsVar+'(1, "WinVer", null, "1.0");');
   mstrSQL.Add(strInsVar+'(2, "BaloonX", 128, null);');
   mstrSQL.Add(strInsVar+'(3, "BaloonY", 88, null);');
   mstrSQL.Add(strInsVar+'(4, "PLineMode", 1, "//0 - Label; 1 - Rich");');
   mstrSQL.Add(strInsVar+'(5, "PLineX", 242, null);');
   mstrSQL.Add(strInsVar+'(6, "PLineY", 153, null);');
   mstrSQL.Add(strInsVar+'(7, "PLineW", 310, null);');
   mstrSQL.Add(strInsVar+'(8, "PLineH", 57, null);');
   mstrSQL.Add(strInsVar+'(9, "PLineAlign", 0, "//Left");');
   mstrSQL.Add(strInsVar+'(10, "PLineVAlign", 1, "//Center");');
   mstrSQL.Add(strInsVar+'(11, "PLineBgColor", null, "25A2EE");');
   mstrSQL.Add(strInsVar+'(12, "PLineTextColor", null, "FFFFFF");');
   mstrSQL.Add(strInsVar+'(13, "PLineTextSize", 9, null);');
   mstrSQL.Add(strInsVar+'(14, "PLineTextStyle", 1, "//Flags");');
   mstrSQL.Add(strInsVar+'(15, "PLineTextFont", null, "MS Sans Serif");');

    Try
     MultiStrSQL(mstrSQL);
    Finally
     mstrSQL.Free
    End;

   FindWins;
  End;
hexor_boo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VALVE Steam® API Wrapper 0.3 for Delphi/Lazarus [Release] ASTRON3D Софт 1 02.01.2015 21:50
SQLite3 + Delphi 7 iLnes БД в Delphi 3 25.11.2013 09:48
Создание ODBC DSN for SQLite3 from Delphi 7 ТипичныйСтудент Помощь студентам 7 13.06.2013 21:16
win98 и ExecSQL Tanuska___:) БД в Delphi 17 02.07.2009 11:35
Два запроса - один ExecSQL EdNovice БД в Delphi 1 27.06.2007 17:33