|
|
|
Cascade удаление удаляет не все записи?!
|
|||
|---|---|---|---|
|
#18+
Леди и джентльмены! Заметила этот свой недочет в проекте лишь сегодня и была озадачена. Объясняю в общих чертах. Table1: nIdCod, cFio, cAdres. Primary индекс на nIdCod. Table2: nId, nIdCod, dDate, cComment. Primary индекс на nId, Regular на nIdCod. В DB Disigner установлен Relationship "один ко многим" от Table1 к Table2 по индексам на nIdCod. Когда делаю триггер, получается, что Table1 является Parent, а Table2 - Child, на Delete выставлено Cascade. Как я рассчитывала, при удалении записи в Table1 из Table2 должны удаляться все записи с таким же nIdCod. А сегодня заглянула в таблицу и очень удивилась. В Table2 всегда после удаления остается 1 запись из тех, которые, по идее, должны каскадно удалитсья при удалении родительской записи. Извините, что так путанно объясняю пробему. Но кто догадался, что я хотела сказать, посоветуйте. Благодарю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2006, 12:14 |
|
||
|
Cascade удаление удаляет не все записи?!
|
|||
|---|---|---|---|
|
#18+
Пиведите, код при удалении, желательно так как он у Вас реализован, а не пример кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2006, 12:34 |
|
||
|
Cascade удаление удаляет не все записи?!
|
|||
|---|---|---|---|
|
#18+
ЛисонькаЛеди и джентльмены! Заметила этот свой недочет в проекте лишь сегодня и была озадачена. Объясняю в общих чертах. Table1: nIdCod, cFio, cAdres. Primary индекс на nIdCod. Table2: nId, nIdCod, dDate, cComment. Primary индекс на nId, Regular на nIdCod. В DB Disigner установлен Relationship "один ко многим" от Table1 к Table2 по индексам на nIdCod. Когда делаю триггер, получается, что Table1 является Parent, а Table2 - Child, на Delete выставлено Cascade. Как я рассчитывала, при удалении записи в Table1 из Table2 должны удаляться все записи с таким же nIdCod. А сегодня заглянула в таблицу и очень удивилась. В Table2 всегда после удаления остается 1 запись из тех, которые, по идее, должны каскадно удалитсья при удалении родительской записи. Извините, что так путанно объясняю пробему. Но кто догадался, что я хотела сказать, посоветуйте. Благодарю. Сделай процедуру по поиску "провисших ссылок" (т.е. таблица2-parent, а таблица1-Child) и удаляй из таблицы2 те записи, для которых нет "пары" в таблице1. поставь эту процедуру в раздел "Администрирование" и запускай периодически.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2006, 12:41 |
|
||
|
Cascade удаление удаляет не все записи?!
|
|||
|---|---|---|---|
|
#18+
Какая версия FoxPro? Приведи код процедуры каскадного удаления. Это в хранимых процедурах, начинается с procedure RIDELETE В некоторых версиях VFP там была ошибка, а кроме того, этот код может не сработать при определенных условиях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2006, 12:47 |
|
||
|
Cascade удаление удаляет не все записи?!
|
|||
|---|---|---|---|
|
#18+
PaulWistПиведите, код при удалении, желательно так как он у Вас реализован, а не пример кода. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Можно и код написать на удаление по nIdCod, но почему триггер так работает? авторКакая версия FoxPro? Приведи код процедуры каскадного удаления. Это в хранимых процедурах, начинается с procedure RIDELETE В некоторых версиях VFP там была ошибка, а кроме того, этот код может не сработать при определенных условиях. Вроде бы выслала то, что Вы попросили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2006, 13:45 |
|
||
|
Cascade удаление удаляет не все записи?!
|
|||
|---|---|---|---|
|
#18+
Это не то. Это текста собственно триггера, но внутри себя он вызывает другую процедуру вот этой командой llRetVal=ridelete() Так вот, RIDELETE - это процедура созданная там же. Она как раз и обеспечивает сам факт удаления. А триггер __RI_DELETE_table1 - это по сути, просто цикл, который перебирает все записи, которые он планирует удалить и вызывает для удаления функцию RIDELETE(). Вот код этой самой функции и хотелось бы посмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2006, 14:11 |
|
||
|
Cascade удаление удаляет не все записи?!
|
|||
|---|---|---|---|
|
#18+
ВладимирМЭто не то. Это текста собственно триггера, но внутри себя он вызывает другую процедуру вот этой командой llRetVal=ridelete() Так вот, RIDELETE - это процедура созданная там же. Она как раз и обеспечивает сам факт удаления. А триггер __RI_DELETE_table1 - это по сути, просто цикл, который перебирает все записи, которые он планирует удалить и вызывает для удаления функцию RIDELETE(). Вот код этой самой функции и хотелось бы посмотреть. Уважаемый Гуру! Я приношу свои извинения, но значить я попросту не знаю, где находится процедура RIDELETE. Поскольку по поиску в Stored Procedure этого слова я не нахожу, значит, процедура прописана где-то еще. Вопрос: а где тогда ее можно посмотреть, скопировать и выложить на форум? Благодарю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2006, 14:40 |
|
||
|
Cascade удаление удаляет не все записи?!
|
|||
|---|---|---|---|
|
#18+
RIDELETE вообще-то одна из самых первых после фразы **__RI_HEADER!@ Do NOT REMOVE or MODIFY this line!!!! @!__RI_HEADER** Однако если ее не нашли, то как же вообще триггер работает? Ведь в присланном фрагменте явно прописан ее вызов llRetVal=ridelete() Попробуй сделать тестовую базу с 2 таблицам и создай для них триггер на удаление по типу Cascade. Кроме того, команду TableUpdate() "в никуда" давать просто нельзя. Как же отлавливать возможные ошибки? Как минимум, нужно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2006, 14:49 |
|
||
|
Cascade удаление удаляет не все записи?!
|
|||
|---|---|---|---|
|
#18+
В дополнение, поскольку идет каскадное обновление FK, не мешало бы обернуть модификацию в транзакцию. ВладимирМ Кстати, на View такой фокус не прошел бы. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2006, 15:00 |
|
||
|
Cascade удаление удаляет не все записи?!
|
|||
|---|---|---|---|
|
#18+
Сделала БД из двух таблиц. Выставила триггер. Та же история. Сегодня утром проделала эту процедуру на другом компьютере. Там все нормально (фоксовый дитрибутив на машинах один и тот же). Тогда я снесла Фокс у себя и инсталльнула заново. В проекте заново расставила триггеры. И все заработало. Появился код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Елизавета Скрунскайте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 10:01 |
|
||
|
Cascade удаление удаляет не все записи?!
|
|||
|---|---|---|---|
|
#18+
ВладимирМКроме того, команду TableUpdate() "в никуда" давать просто нельзя. Каюсь, Учитель!.. Вы же мне еще месяца два назад попеняли на эту "безадресность". Я везде в проекте переправила, а про кнопку для удаления не подумала ((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 11:36 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33835764&tid=1591268]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
157ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 492ms |

| 0 / 0 |
