2010-09-23 2 views
3

Я использую Delphi 5 с SQL Server 2000 здесь.ADOQuery обходит вместо триггера удаления

Я создал ADOQuery поверх обновляемого представления с помощью триггера INSTEAD OF DELETE.

Обновляемый вид в основном используется для управления мягкими удалениями. Он отфильтровывает записи, которые помечены как удаленные, и также скрывает контрольный столбец.

Все работает отлично, когда я выдаю команды DELETE напрямую в базу данных. Я удаляю запись в представлении, и базовая таблица обновляется, делая мягкое удаление, как ожидалось.

Когда я пытаюсь использовать ADOQuery для удаления записи, он обходит представление и удаляет запись непосредственно в базовой таблице, поэтому триггер вместо этого в представлении никогда не запускается.

Я также использую ссылочные ограничения, и удаление из-за них является ошибкой из-за них, но я не знаю, если это имеет значение. Это не происходит при выдаче команд удаления в представление.

Кто-нибудь из вас, ребята, знает, как обойти это раздражающее поведение?

+3

Вы пробовали профилировать сервер, чтобы увидеть, какие команды SQL выполняет ADOQuery? –

+0

Exec sp_executesql N'DELETE ОТ "CONTROLEPROCESSOS_MIGRACAO" .. "_ tblCadUsuarios", где "CODUSUARIO" = @ P1' , N '@ P1 NVARCHAR (5)', N'40/04' _tblCadUsuarios является фактической таблицей, а представление называется tblCadUsuarios –

+1

Знание SQL-сервера датировано, и я могу попирать все, что он/не способен, но почему триггер INSTEAD OF DELETE, определенный на представлении, а не каким-то образом реализованным напрямую против стола? Если бы я хотел мягких удалений на столе, я попытался бы убедиться, что у меня (или у кого-нибудь еще) не будет проблем, потому что я забыл использовать представление ...? –

ответ

1

Обратите внимание: вместо этого он удаляется непосредственно из основного стола. Вероятно, это связано с тем, что он обнаруживает, что это представление и работа с самой основной таблицей. Чтобы предотвратить это, объявите свое мнение WITH VIEW_METADATA, см. ALTER VIEW для получения дополнительной информации.

Затем библиотека ADO обрабатывает представление в виде таблицы. Имейте в виду, что у вас может получить нежелательные побочные эффекты, обманув библиотеку БД, например, в случаях, когда удаление фактически не выполняется или оно выполняет обновление вместо удаления.

+0

you da man, good sir –

Смежные вопросы