Вопросы программирования и использования среды Lazarus.
Модератор: Модераторы
Luxor
новенький
Сообщения: 72 Зарегистрирован: 10.06.2010 19:30:43
Сообщение
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
Mr.Smart
долгожитель
Сообщения: 1796 Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!
Сообщение
Mr.Smart » 01.09.2010 11:06:25
И так: Метод Open вызывается ТОЛЬКО для запросов, которые возвращают результат в виде таблицы! А для запросов без результата нужно применять метод ExecSQL !
Luxor
новенький
Сообщения: 72 Зарегистрирован: 10.06.2010 19:30:43
Сообщение
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
Mr.Smart
долгожитель
Сообщения: 1796 Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!
Сообщение
Mr.Smart » 01.09.2010 11:18:14
А теперь ошибка в типе данных! Как можно строковому типу присвоить целочисленное значение? пс Углубитесь в изучение SQL!
Luxor
новенький
Сообщения: 72 Зарегистрирован: 10.06.2010 19:30:43
Сообщение
Luxor » 01.09.2010 11:27:00
уже и в кавычнки значение ставил - все равно та же ошибка. Подскажите, как правильно?
Vadim
долгожитель
Сообщения: 4112 Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск
Сообщение
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; и напишите что получилось.
Luxor
новенький
Сообщения: 72 Зарегистрирован: 10.06.2010 19:30:43
Сообщение
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;
gNEV
новенький
Сообщения: 26 Зарегистрирован: 23.07.2010 14:20:06
Откуда: Санкт-Петербург
Сообщение
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; вместо работы с транзакциями, которые в большинстве случаев работают автоматически.