powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / SQLite [игнор отключен] [закрыт для гостей] / ExecSQL и несколько инструкций в строке
3 сообщений из 3, страница 1 из 1
ExecSQL и несколько инструкций в строке
    #37328096
ASWar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть поле в БД, в котором хранится структура временной БД для её создания во время работы программы.
s:= SQLtb.FieldAsBlobText(SQLtb.FieldIndex['rData']);
TempDB.BeginTransaction;
TempDB.execsql(s);
TempDB.Commit;

В строке несколько SQL-инструкций, но выполняется только первая (индекс уже не создаётся).
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE TABLE [ZakArt] (
  [Cod] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT DEFAULT ( 0 ), 
  [Name] VARCHAR( 50 ), 
  [Zakaz] INTEGER NOT NULL ON CONFLICT ROLLBACK, 
  [Artikul] VARCHAR( 20 ) NOT NULL ON CONFLICT ROLLBACK, 
  [tKol] INTEGER NOT NULL DEFAULT ( 0 ), 
  [tMass] FLOAT NOT NULL DEFAULT ( 0 ), 
  [Notes] BLOB);

CREATE INDEX [Zakaz_Idx] ON [ZakArt] ([Zakaz]);

CREATE TRIGGER [ZakArt_D]
AFTER DELETE
ON [ZakArt]
BEGIN
DELETE FROM ZakParam WHERE ZakArt = OLD.Cod;
END;
...

Почему так происходит? Как добиться выполнения всего кода?
...
Рейтинг: 0 / 0
ExecSQL и несколько инструкций в строке
    #37329889
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во первых, какая-то чушь: структура базы хранится в базе и читается из базы прежде чем эту базу создать?
Во вторых, где хранится исходный SQL-скрипт значения не имеет. Зато как именно он запускается на исполнение - значение имеет. А этот вопрос ты умолчал. На чем хоть пишешь-то? Дельфи скорее всего... Ну тогда только парсить скрипт, разбивать его на отдельные команды и запускать на выполнение по отдельности. Был-бы нормальный С, то в родном интерфейсе есть замечательная команда sqlite3_exec() которая прекрасно работает на пакеты команд.
...
Рейтинг: 0 / 0
ExecSQL и несколько инструкций в строке
    #37332927
Ewung
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Судя по коду - Delphi. Где-то в его справке рекоммендуют работать с типом Variant (FieldValues[]) нежели с FieldAs...(), т.к. тип является чуть ли не основным.

БД поддерживает выполнение нескольких инструкций в 1-м запросе, как, например, в MSSQL?

Другой вариант: делить s на несколько строк по символу ; (explode, Pos + SubString) и для каждой TempDB.execsql(str);
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / ExecSQL и несколько инструкций в строке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]