Создание таблицы в Firebird из Lazarus'a

Вопросы программирования и использования среды Lazarus.

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

Создание таблицы в Firebird из Lazarus'a

Сообщение Reyko » 06.11.2009 00:13:32

Требуется создать таблицу в пустой базе данных из Лазаря.
Lazarus 0.9.26.2 + Firebird 2.1 + sqldb.
Вот код:
Код: Выделить всё
SQLQuery1.Transaction:=SQLTransaction1;
     SQLQuery1.DataBase:=IBConnection1;
     DataSource1.DataSet:=SQLQuery1;
     SQLQuery1.Close;
     SQLQuery1.SQL.Clear;
     SQLQuery1.SQL.Text:='CREATE TABLE "MYUSER" ("LOGIN" VARCHAR(30), SURNAME VARCHAR(30), PRIMARY KEY("LOGIN"));';
     SQLQuery1.ExecSQL;
     SQLQuery1.SQL.add('SELECT * FROM "MYUSER";');
     SQLQuery1.Open;

При попытке добавить таблицу Лазарус выдает ошибку : sql error code -104 Token unknown line 2 char 1
Reyko
новенький
 
Сообщения: 15
Зарегистрирован: 05.11.2009 23:48:12
Откуда: Магнитогорск

Re: Создание таблицы в Firebird из Lazarus'a

Сообщение EmeraldMan » 06.11.2009 00:38:05

После первого запроса забыли очистить SQL (SQLQuery1.SQL.Clear).
И Query пытается второй раз выполнить сразу и создание и выборку вот и ругается.
Т.е. ругался он именно на второй запрос select, который шел не как отдельный, а как вторая строка.
Аватара пользователя
EmeraldMan
постоялец
 
Сообщения: 149
Зарегистрирован: 16.10.2008 08:41:51
Откуда: Белгород

Re: Создание таблицы в Firebird из Lazarus'a

Сообщение Reyko » 06.11.2009 00:46:44

Если добавить SQLQuery1.SQL.Clear, то лазарь ругается, что такой таблицы не существует:
Код: Выделить всё
Dynamic SQL Error
SQL Error code -204
table unknown
MYUSER
at line 1 column 10

Я так поняла, что таблица не создалась...
Reyko
новенький
 
Сообщения: 15
Зарегистрирован: 05.11.2009 23:48:12
Откуда: Магнитогорск

Re: Создание таблицы в Firebird из Lazarus'a

Сообщение xcod » 06.11.2009 06:47:15

Reyko писал(а):Я так поняла, что таблица не создалась...

А транзакцию подтвердили7
xcod
постоялец
 
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Re: Создание таблицы в Firebird из Lazarus'a

Сообщение Reyko » 06.11.2009 12:48:26

xcod писал(а):А транзакцию подтвердили7


Вы имели введу это:
Код: Выделить всё
SQLQuery1.ApplyUpdates;
SQLTransaction1.CommitRetaining;
?

Если добавить после SQLQuery1.ExecSQL, то появляется ошибка:
Код: Выделить всё
Project reised exception class 'EDataBaseError' with the message:
Operation cannot be performed on an inactiv dataset
Reyko
новенький
 
Сообщения: 15
Зарегистрирован: 05.11.2009 23:48:12
Откуда: Магнитогорск

Re: Создание таблицы в Firebird из Lazarus'a

Сообщение xcod » 06.11.2009 14:51:10

попробуйте после
Код: Выделить всё
SQLQuery1.ExecSQL;

сделать
Код: Выделить всё
SQLTransaction1.CommitRetaining;
xcod
постоялец
 
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Re: Создание таблицы в Firebird из Lazarus'a

Сообщение Reyko » 06.11.2009 15:40:23

xcod писал(а):попробуйте после
Код: Выделить всё
SQLQuery1.ExecSQL;

сделать
Код: Выделить всё
SQLTransaction1.CommitRetaining;


Спасибо большое! Всё заработало.
Я думала, что SQLTransaction1.CommitRetaining без SQLQuery1.ApplyUpdates не работает и даже не думала использовать их раздельно ...
Reyko
новенький
 
Сообщения: 15
Зарегистрирован: 05.11.2009 23:48:12
Откуда: Магнитогорск

Re: Создание таблицы в Firebird из Lazarus'a

Сообщение v-t-l » 06.11.2009 16:30:20

Reyko писал(а):Я думала, что SQLTransaction1.CommitRetaining без SQLQuery1.ApplyUpdates не работает и даже не думала использовать их раздельно ...

SQLQuery1.ApplyUpdates нужен, если запрос вернул набор данных, вы их отредактировали и хотите отправить изменения в БД.
v-t-l
энтузиаст
 
Сообщения: 735
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Создание таблицы в Firebird из Lazarus'a

Сообщение Reyko » 06.11.2009 16:58:03

v-t-l писал(а):SQLQuery1.ApplyUpdates нужен, если запрос вернул набор данных, вы их отредактировали и хотите отправить изменения в БД.

Спасибо за объяснение :)
Reyko
новенький
 
Сообщения: 15
Зарегистрирован: 05.11.2009 23:48:12
Откуда: Магнитогорск

Re: Создание таблицы в Firebird из Lazarus'a

Сообщение Attid » 06.11.2009 17:39:07

CommitRetaining не рекомендуется использовать, можете потом получить проблемы с транзакциями в БД. лучше просто Commit
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E


Вернуться в Lazarus

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

Сейчас этот форум просматривают: Google [Bot] и гости: 52

Рейтинг@Mail.ru