SqlDb+SQLite+Alter table?

Модератор: Модераторы

Ответить
ViruZ
постоялец
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина
Контактная информация:

SqlDb+SQLite+Alter table?

Сообщение ViruZ »

Здравствуйте. Есть рабочий проект с использованием SQLite через SQLIte3Connection/SQLQuery, при отсутсвии файла БД через TSQLScript создаётся пустая БД. Всё отлично работает уже около 5 лет. НО! Возникла необходимость добавить в одну таблицу дополнительное поле, через SQLite Expert Personnal запрос

Код: Выделить всё

ALTER TABLE  TARIF ADD COLUMN "DOPLATA" MONEY(15, 2);

выполняется без проблем, а при попытке выполнить программно ни через SQLQuery.Execute, ни через SQLScript.ExecuteScript, ни даже через SQLite3Connection.ExecuteDirect не работает: ошибка "near "ALTER" syntax error".
Как побороть?
Последний раз редактировалось ViruZ 16.02.2017 13:41:53, всего редактировалось 1 раз.
wavebvg
постоялец
Сообщения: 355
Зарегистрирован: 28.02.2008 03:57:35

Сообщение wavebvg »

1. Выяснить, чем отличается выполнение запросов.
2. Исправить парсер, который ломает запрос перед выполнением.

Желательно, о результатах отписаться. Месяц назад такое встречал (для теста нужно было создавать базу из DDL) и решил проблему аналогично.
ViruZ
постоялец
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина
Контактная информация:

Сообщение ViruZ »

wavebvg писал(а): Исправить парсер

В модуле sqldb есть следуещее объявление:

Код: Выделить всё

 StatementTokens : Array[TStatementType] of string = ('(unknown)', 'select',
                  'insert', 'update', 'delete',
                  'create', 'get', 'put', 'execute',
                  'start','commit','rollback', '?'
                 );

я не вижу ключевого слова "alter". Может в этом причина?
Ещё одно. В Википедии статья по работе с TSqlQuery:
For instance the following example code in your MySQL client will add a unique index to your table:

Код: Выделить всё

ALTER TABLE testrig 
ADD COLUMN autoid INT
PRIMARY KEY AUTO_INCREMENT;

Adding this field will not hurt, and will allow your applications to update the field.
-----
Вольный перевод: Для примера следующий образец кода для MySQL добавит уникальный индекс в Вашу таблицу
...
Добавление этого поля не повредит, и позволит вашему приложению обновить поле.

MySQL не использую, поэтому работоспособность не проверял.
wavebvg
постоялец
Сообщения: 355
Зарегистрирован: 28.02.2008 03:57:35

Сообщение wavebvg »

ViruZ писал(а):Может в этом причина?

Ну, на сколько я понял по сообщениям об ошибках в других программах, проблема в том, что действие по умолчанию, которое выполняется в случае отсутствия в этом списке (а может и другом) как-то экранирует символы. Необходимо трейсить до момента отправки запроса на сервер.
ViruZ
постоялец
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина
Контактная информация:

Сообщение ViruZ »

Разобрался. У меня был криво сохранён скрипт в файл для обновления, пересохранил в кодировке ANSI вместо UTF8 и всё заработало :D
Ответить