![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
IB и FIB по разному реагируют на SQL-запрос? [D7, IB6.x]
fedor © (2006-02-03 00:06:00)Подскажите плиз.В чем дело?
Фрагмент текста, используеся компонент FIBPlus:
FIBTable.Close;
FIBTable.SelectSQL.Clear;
SQLdelcom:='delete from AnyTable where KDATE="'+DateTimeToStr(kdat)+'"';
FIBTable.SelectSQL.Add(SQLdelcom);
FIBTable.Open;
Выдает ошибку, что не может найти поле из этой же таблицы, по которому идет связь с мастер. Если этот же код под управлением InterBase-компонентов работает отлично.
DSKalugin (2006-02-03 11:33:00) [1]SelectSQL предназначен только для запросов, основанных на Select
А чтобы удалить запись
FIBQuery
FIBQuery1.Close;
FIBQuery1.SQL.Clear;
FIBQuery1.SQL.Add('delete from AnyTable where KDATE= '''+DateTimeToStr(kdat)+'''');
FIBQuery1. ExecQuery;
ЮЮ (2006-02-03 07:57:00) [2]А в гриде что отображается? Та саамая FIBTable, что в приведенном коде? Неверю.
> как сделали бы Вы?
FIBDataSet.Delete;
где FIBDataSet - тот самый, который отображается в гриде, а в DeleteSQL которого было бы написано что-то типа
DELETE FROM AnyTable where Id = :Id_OLD
fedor (2006-02-03 07:44:00) [3]В IBX в DBGride выделяю запись и нажимаю на кнопку удалить в которой вышеуказанный код. Запись удаляется и это сразу видно в сетке. Никаких последствий и ни каких ошибок. Что неправильного кроме самого понятия? Если не трудно подскажите плиз как сделали бы Вы?
ЮЮ (2006-02-03 07:31:00) [4]
> Что он может делать неправильно если он удаляет?
Что же правильного в том, что пытась открыть набор данных мы вместо Набора Данных на клиенте посылаем команду на сервер "Удалить записи". Это что, система безопасности такая? Типа, чтобы никто ничего не увидел :)
fedor (2006-02-03 07:25:00) [5]Но он работает. Что он может делать неправильно если он удаляет?
ЮЮ (2006-02-03 03:06:00) [6]Что, интересно можно "наблюдать" в FIBTable, у которой
FIBTable.SelectSQL = 'delete from AnyTable where ...'; ?
Для удаления существует DeleteSQL, текст которого должен быть параметрическим запросом, параметры которого должны называться специальным образом и запрос должен удалять РОВНО одну - текущую - запись, т.е. в where должны стоять исключительно ключевое поле (поля).
Для удаления группы записей следует использовать отдельный запрос, а не вшитые в FIBDataSet, а после его выполнения переоткрыть FIBDataSet.
> Если этот же код под управлением InterBase-компонентов работает
> отлично.
Этот код не может работать отлично по определению