On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 104
Зарегистрирован: 27.07.08
ссылка на сообщение  Отправлено: 27.11.10 16:01. Заголовок: Каскадное удаление связанных записей


Итак, у меня есть форма с целыми четырьмя TSBROWSE, причём каждое - на уровень ниже в иерархической структуре данных:
1) Проект
2) Тип работ
3) Подтип работ
4) Вид работ.

В TSBROWSE есть метод SetDeleteAction(lOnOff,lConfirm,{|nRecNo,oBrw,lRecall|PrevProd},{||PostProd})
Нужно, чтобы при удалении из таблиц верхнего уровня каскадно удалялись связанные записи из таблицы нижнего уровня. Перед удалением - диалог с вопросом Нужно ли удалять Да/Нет. Возможность восстановления Recall не нужна. Как получше это организовать. PrevProd захватывает первичный ключ для связи с данной таблицей, а PostProd - удаление всех строчек, которые попадают под этот первичный ключ.

FUNCTION PrevProd(nRecno,oBrw,lRecall)
cProNum:=Projekt->ProNum //PUBLIC
RETURN .T. //Запретов на удаление пока нет

FUNCTION PostProd(oBrw)
SetScope(0,cProNum)
SetScope(1,cProNum)
DELETE
//Обновление TSBROWSE
RETURN

Или как по-вашему лучше всего организовать каскадное удаление?


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 7 [только новые]


постоянный участник


Пост N: 179
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 27.11.10 20:19. Заголовок: PostProd - удаление..



 цитата:
PostProd - удаление всех строчек

А разве при такой команде все записи будут удалены?
Я удаляю в цикле
Do While !eof() // Удаление из БД slave
if slave->N_Talon != Master->(N_Talon) ; exit; endif
Delete
Skip
enddo
А потом в родительской базе
Select Master
Delete


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 105
Зарегистрирован: 27.07.08
ссылка на сообщение  Отправлено: 28.11.10 11:10. Заголовок: Это не проблема. Про..


Это не проблема. Проблема - связанное обновление подчинённого TSBROWSE. После удаления оно переходит на следующую строчку главной таблицы. Нужно, чтобы соответственно обновлялся подчинённый TSBROWSE.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 16
Зарегистрирован: 14.04.10
ссылка на сообщение  Отправлено: 28.11.10 14:19. Заголовок: Для обновления пове..


Для обновления повесить на событие ON Change метод oBrw:SetFilter

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 106
Зарегистрирован: 27.07.08
ссылка на сообщение  Отправлено: 28.11.10 21:55. Заголовок: И это я знаю, только..


И это я знаю, только у меня не SetFilter, а SCOPE с последующим обновлением, поскольку у меня CDX индексы, а SetFilter ИМХО рассчитан на NTX

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1005
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 29.11.10 12:42. Заголовок: Dr. Oldwarez пишет: ..


Dr. Oldwarez пишет:

 цитата:
И это я знаю


Все знаю и почему то не получается? В поледней версии TSBrowse метода SetDeleteAction - я не нашел.
И, к слову, SetFilter заблокирован #ifdef _TSBFILTER7_, а некоторые static функции, используемые только SetFilter почему то нет.

Есть метод SetDeleteMode, в справочнике в разделе написано "This Method only activates this feature. Deletion is done by method DeleteRow()".
Т.е. никаких внешних DELETE, GOTO и пр. Все действия только через методы объекта - удаление, позиционирование, обновление и т.д.

P.S. В методе DeleteRow Carlos что-то намутил, и оптимизировать не помешало бы.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 17
Зарегистрирован: 14.04.10
ссылка на сообщение  Отправлено: 29.11.10 13:14. Заголовок: Мне кажется нет разн..


Мне кажется нет разницы. SetFilter, наверное не навредил бы.
Тогда попробуй Brw1:bChange:={||Ordscope(?),Brw2:Refresh(.t.),Brw3:Refresh(.t.),Brw3:Refresh(.t.)}


Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 126
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 29.11.10 15:18. Заголовок: Петр пишет: к слову..


Петр пишет:

 цитата:
к слову, SetFilter заблокирован #ifdef _TSBFILTER7_, а некоторые static функции, используемые только SetFilter почему то нет.


Спасибо, поправил для следующей сборки

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 108
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет