Ошибка при добавлении записи в таблицу

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

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

Ошибка при добавлении записи в таблицу

Сообщение Luxor » 01.09.2010 10:50:37

Пытаюсь вставить запись в одно из полей таблицы базы FireBird

Код: Выделить всё
Form1.SQLQuery1.Close;
Form1.SQLQuery1.SQL.Add('INSERT INTO ID_ALL (UNIK_ID) VALUES (555)');
Form1.SQLQuery1.Open;


При работе с базой использую компоненты вкладки SQLdb (lazarus 0.9.28.2)

1.jpg
Luxor
новенький
 
Сообщения: 72
Зарегистрирован: 10.06.2010 19:30:43

Re: Ошибка при добавлении записи в таблицу

Сообщение Mr.Smart » 01.09.2010 11:06:25

И так: Метод Open вызывается ТОЛЬКО для запросов, которые возвращают результат в виде таблицы! А для запросов без результата нужно применять метод ExecSQL!
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Ошибка при добавлении записи в таблицу

Сообщение Luxor » 01.09.2010 11:12:09

Код: Выделить всё
Form1.SQLQuery1.Close;
Form1.SQLQuery1.SQL.Add('INSERT INTO ID_ALL (UNIK_ID) VALUES (555)');
Form1.SQLQuery1.ExecSQL;


Та же самая ошибка.
Тип поля, в которое вставляется запись - VARCHAR
Luxor
новенький
 
Сообщения: 72
Зарегистрирован: 10.06.2010 19:30:43

Re: Ошибка при добавлении записи в таблицу

Сообщение Mr.Smart » 01.09.2010 11:18:14

А теперь ошибка в типе данных!
Как можно строковому типу присвоить целочисленное значение?

пс Углубитесь в изучение SQL!
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Ошибка при добавлении записи в таблицу

Сообщение Luxor » 01.09.2010 11:27:00

уже и в кавычнки значение ставил - все равно та же ошибка. Подскажите, как правильно?
Luxor
новенький
 
Сообщения: 72
Зарегистрирован: 10.06.2010 19:30:43

Re: Ошибка при добавлении записи в таблицу

Сообщение Vadim » 01.09.2010 11:43:50

Luxor
Попробуйте сделать так;
Код: Выделить всё
Form1.SQLQuery1.Close;
Form1.SQLQuery1.SQL.Text := 'INSERT INTO ID_ALL (UNIK_ID) VALUES ('+QuotedStr(555)+')';
Form1.SQLQuery1.ExecSQL;

и напишите что получилось.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Ошибка при добавлении записи в таблицу

Сообщение Luxor » 01.09.2010 13:35:58

Спасибо Vadim. Попробовал Ваш вариант - работает, но не появляется запись. Только, когда сделал транзакцию и её подтверждение - свё стало на свои места.
Код: Выделить всё
Form1.SQLTransaction1.StartTransaction;
Form1.SQLQuery1.Close;
Form1.SQLQuery1.SQL.Clear;
Form1.SQLQuery1.SQL.Text := 'INSERT INTO ID_ALL (ID) VALUES ('+IntToStr(9999)+')';
Form1.SQLQuery1.ExecSQL;
Form1.SQLTransaction1.Commit;
Form1.SQLTransaction1.Active:=True;
Form1.SQLTransaction1.Active:=False;
Form1.SQLTransaction1.EndTransaction;
Luxor
новенький
 
Сообщения: 72
Зарегистрирован: 10.06.2010 19:30:43

Re: Ошибка при добавлении записи в таблицу

Сообщение gNEV » 01.09.2010 14:48:05

Luxor писал(а):Спасибо Vadim. Попробовал Ваш вариант - работает, но не появляется запись. Только, когда сделал транзакцию и её подтверждение - свё стало на свои места.
Код: Выделить всё
Form1.SQLTransaction1.StartTransaction;
Form1.SQLQuery1.Close;
Form1.SQLQuery1.SQL.Clear;
Form1.SQLQuery1.SQL.Text := 'INSERT INTO ID_ALL (ID) VALUES ('+IntToStr(9999)+')';
Form1.SQLQuery1.ExecSQL;
Form1.SQLTransaction1.Commit;
Form1.SQLTransaction1.Active:=True;
Form1.SQLTransaction1.Active:=False;
Form1.SQLTransaction1.EndTransaction;


Так и должно быть. Поскольку Вы обновили запросом физическую таблицу базы, а собственно сам DataSet остался с прежними данными. Достаточно просто сделать DataSet.Refresh; вместо работы с транзакциями, которые в большинстве случаев работают автоматически.
gNEV
новенький
 
Сообщения: 26
Зарегистрирован: 23.07.2010 14:20:06
Откуда: Санкт-Петербург


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru