2015-04-30 2 views
0

У нас есть таблица ORDERS и таблица CHARGES. Для каждого заказа может взиматься плата. Если заказ удален, мы хотим, чтобы плата автоматически удалялась.Каскадное удаление с использованием макроса данных

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

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

Как сделать это с помощью макроса данных?

Вдохновленный Delete Records from Table Before Delete Trigger Я попытался следующие:

enter image description here

где DeleteCharge является VBA функцию

Он работает, но:

  • Я предпочел бы не должны использование VBA
  • Если пользователь отменяет первое удаление, все же выполняется его инициированное удаление.
+0

Доступ позволит вам создать отношения на основе 2 полей в каждой таблице и обеспечить ссылочную целостность с помощью 'CASCADE DELETE'. – HansUp

+0

@HansUp I попробовал это, но Access хочет уникальный индекс в основной таблице. В моем случае поля с обеих сторон не могут быть уникальными. –

+0

Не уверен, что я понимаю. Означает ли это, что две или более строки ORDERS могут быть связаны с одним и тем же набором строк CHARGES? – HansUp

ответ

0

Без каких-либо структур таблицы, трудно дать вам очень хороший ответ. Похоже, что ваши таблицы недостаточно нормализованы ... возможно, в таблице «сборов» есть ненужное поле ... Используете ли вы таблицу «сборов» в качестве таблицы сведений о заказе? Если да, то, как это должно работать нормально:

Order_OrderDetails_Products

В этой картине, цена единицы вводится в таблицу ORDERDETAILS, используя форму для создания заказа, а не соотношением (если увеличение цены за единицу в следующем месяце мы не хотим редактировать цену в старых заказах. В такой конфигурации каскадное удаление должно быть достаточно, чтобы позаботиться о проблеме. Не могли бы вы опубликовать свой дизайн таблицы? Без него было бы сложно для любого, чтобы дать вам хороший ответ.

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