Хорошо, немного больше информации.
Макрос данных запускается, если данные изменяются извне пользовательского интерфейса Access, например через ODBC, OLE DB и т. д.?
Да, это так.
Эти истинные триггеры находятся на уровне механизма данных. Таким образом, использование ado, dao или даже редактирование таблиц в табличном представлении в ms-access означает, что триггеры сработают. Эти триггеры также включают сценарий, когда на вашем компьютере даже не установлен ms-доступ.
Вам, конечно, понадобится установить JET (в оставшейся части этой статьи я буду использовать термин ACE). Помните, что только в access 2007 команда доступа получила право собственности на JET. Теперь они могут усовершенствовать этот движок для своих нужд. Мы начали видеть некоторые изменения в ACE в 2007 году, и теперь мы увидим ОЧЕНЬ больше изменений в 2010 году. Некоторые из этих функций все еще для меня NDA… но я выложу столько, сколько смогу.
Например, могут ли они быть созданы в коде (ACEDAO, SQL DDL и т. Д.)?
В коде perahps, но не с SQL ddl. Триггеры не являются командами sql. Имейте в виду, что для Oracle, Sql-серверов или MOST-систем на рынке они все равно имеют свой собственный язык для своих триггеров.
В новом ACE вы, таким образом, напишите так называемый макрос данных. Вы используете редактор макросов в ms-access. Это устаревшие макросы доступа, но редактор был полностью переработан. Новые макросы также имеют подпрограммы, циклы, блоки if, then else и тип набора записей. Помните, мы получили возможность создавать временные переменные в макросах 2007 года. В 2010 году это расширение также включает локальные переменные и новые функции.
Синтаксис существующих макрокоманд такой же, как и в предыдущих версиях. Тем не менее, у нас есть новая гладкая IDE вместе с добавленными выше классными командами. Теперь у нас есть два типа макросов. Макросы пользовательского интерфейса (как и раньше), а теперь новые так называемые макросы данных. Для макроса уровня таблицы не имеет смысла выводить сообщения об ошибках на экран. Таким образом, любая зарегистрированная ошибка уходит в таблицу. Также есть несколько новых команд ведения журнала, которые позволяют вам записывать свои собственные ошибки в эту таблицу. Блестящий и простой дизайн здесь. Вот как выглядит эта таблица журнала ошибок:
(источник: kallal.ca )
В мире огромных IDE, огромных фреймов и ужасающих огромных библиотек кода, необходимых для обновления простой строки в таблице, я могу сказать, что макросы данных являются самой новой функцией. Они очень похожи на то, как работает оригинальный dbaseII. Они очень простые, но смертельно мощные, потому что работают на уровне стола.
Например, вот макрос данных, который будет поддерживать инвентаризацию итогов таблицы. В этом примере я собираюсь предположить, что основные записи инвентаризации существуют. И тогда у нас есть таблица деталей заказа. Если пользователь изменяет какое-либо значение в таблице заказов, мы хотим, чтобы основная таблица автоматически обновляла уровни запасов.
Итак, мы имеем:
У меня есть две таблицы
tblFruits: main data fruit inventory table
id (autonumber)
Fruit text
OnHand (number value of fruit in inventory)
tblFruitsOrder
id (autonumber)
Fruit_id (FK to tblFruts.ID)
QtyOrder (number of fruit to order)
Это простой тест
Итак, у нас будет триггер в tblFruitsOrder, который будет обновлять
+ поддерживать уровни запасов в tblFruits, когда поле QtyOrder имеет значение
отредактировано или изменено.
Вот как выглядит макрос:
(источник: kallal.ca )
Обратите внимание, как все просто. Обратите внимание, что в IDE, если вы щелкнете по фрагменту кода, вы получите редактирование типа макроса старого стиля, в котором вы можете ввести значения для команды (это похоже на предварительный 2010 год, но теперь параметры и редактирование выполняются в код, а не панель, которая появляется в нижней части экрана в предыдущих версиях).
Вот еще один снимок экрана, на котором я играю с возможностью сделать цикл и вызвать подпрограмму.
(источник: kallal.ca )
Ввыше мы можем использовать msgboxs и т. д., потому что это не макрос уровня таблицы. Таким образом, доступные команды автоматически ограничиваются при написании макроса на уровне таблицы, а не обычного макроса. Терминология, принятая нами для различения двух типов макросов, - это макросы пользовательского интерфейса и макросы данных.
Вышесказанное - это все, о чем я могу говорить в лобке. Однако есть еще несколько ДЕЙСТВИТЕЛЬНО аккуратных функций в этих макросах, о которых я просто пока не могу говорить публично, так как я все еще нахожусь под NDA в отношении этих функций. Но есть и более интересные сюрпризы.
Вот снимок экрана с типами триггеров таблиц, которые у нас есть:
(источник: kallal.ca )