![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Глюки ADO часть 2-ая [D3, D4, D5, D6, MSSQL, Access]
RAVEN © (2002-01-28 15:45:00)Доброё время суток, Мастера! Проблема в следующем: Мне нужно удалить некоторые записи из одной таблицы. Всё бы ничего, но эти записи подчинены иерархии, т.е. одна является дочерней другой и т.д... Если какие-нибудь предложения будут по поводу удаления, готов их выслушать(заранее спасибо). Но проблема в том, что мой способ удаления что-то не совсем корректно работает. Значит способ такой. Я вешаю на обработчик события BeforeDelete набора данных(DS:TADODataSet, например), такую строку
PostMessage(MainForm.Handle,DSM_DELETEDOCUMENT,Integer(DataSet),DataSet.Fields[0].AsInteger);
Ниже приведён обработчик мессаджа DSM_DELETEDOCUMENT
procedure TMainForm.DeleteDocument(var Message:TMessage);
var DS:TADODataSet;
Value:integer;
begin
Value:=Message.LParam;
DS:=TADODataSet(Message.WParam);
if not (DS.State=dsInactive) then
While DS.Locate("Parent",Value,[]) do DS.Delete;
end;
При трассировке события BeforeDelete и AfterDelete срабатывают, но дочерние записи удаляются или не все или не удаляются вообще, а главная материнская запись удаляется всегда. Помогите пожалуйста понять что происходит?
Delirium (2002-01-28 17:02:00) [21]Ну и что? Вводишь пременную, которая будет "включать" или "выключать" обработку в зависимости от того удаляется родитель или потомки. Но я бы, на самом деле, сделал удаление через SQL - оно и быстрее и надёжнее.
RAVEN (2002-01-28 16:53:00) [22]Загвоздка в том что таблица одна, а в ней реализовано дерево.
Delirium (2002-01-28 16:48:00) [23]А в чём проблема - поместил все свои действия в BeforeDelete, или есть какая-то загвоздка?
RAVEN (2002-01-28 16:41:00) [24]Прошу прощения, база на Access. А насчёт "огорода" я бы с удовольствием выслушал ваш способ.
SergSuper (2002-01-28 16:36:00) [25]Я конечно понимаю, что это всё глюки АДО, но зачем такой огород с PostMessage городить?
Кстати непонятно на чем база - на MSSQL или Access?
Если на первом, то это надо делать на стороне сервера.