SqlDb+SQLite+Alter table?

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

SqlDb+SQLite+Alter table?

Сообщение ViruZ » 16.02.2017 11:07:52

Здравствуйте. Есть рабочий проект с использованием 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 14:41:53, всего редактировалось 1 раз.
ViruZ
постоялец
 
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина

Re: SqlDb+SQLite+Alter table?

Сообщение wavebvg » 16.02.2017 11:33:26

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

Желательно, о результатах отписаться. Месяц назад такое встречал (для теста нужно было создавать базу из DDL) и решил проблему аналогично.
wavebvg
постоялец
 
Сообщения: 354
Зарегистрирован: 28.02.2008 04:57:35

Re: SqlDb+SQLite+Alter table?

Сообщение ViruZ » 16.02.2017 14:16:21

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 не использую, поэтому работоспособность не проверял.
ViruZ
постоялец
 
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина

Re: SqlDb+SQLite+Alter table?

Сообщение wavebvg » 16.02.2017 15:19:33

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

Ну, на сколько я понял по сообщениям об ошибках в других программах, проблема в том, что действие по умолчанию, которое выполняется в случае отсутствия в этом списке (а может и другом) как-то экранирует символы. Необходимо трейсить до момента отправки запроса на сервер.
wavebvg
постоялец
 
Сообщения: 354
Зарегистрирован: 28.02.2008 04:57:35

Re: SqlDb+SQLite+Alter table?

Сообщение ViruZ » 16.02.2017 16:04:10

Разобрался. У меня был криво сохранён скрипт в файл для обновления, пересохранил в кодировке ANSI вместо UTF8 и всё заработало :D
ViruZ
постоялец
 
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru