В дополнении к ответу Сергея, событийные данные Макросы в Access может вызывать только функции VBA, если
- таблица обновляются с Microsoft Access самой (MSACCESS.EXE) и
- код VBA доступен для файла базы данных Access, в котором вызывается обновление таблицы.
Так, например, если макрос данных «Перед изменением» вызывает следующую функцию для получения имени текущего пользователя (чтобы он мог вставить имя в поле в этой таблице, например [CreatedBy] или [UpdateBy]),
Public Function GetUserName()
Dim wshNet As Object ' WshNetwork
Set wshNet = CreateObject("WScript.Network") ' New WshNetwork
GetUserName = wshNet.UserName
Set wshNet = Nothing
End Function
то следующие условия:
Обновление таблицы из приложения без доступа
A Non-Access APPLICAT (например, приложение .NET с использованием System.Data.OleDb или System.Data.Odbc) просто не может обновить таблицу. Он выдаст ошибку:
Функция «GetUserName» недопустима для выражений, используемых в макросах данных.
Обновление связанной таблицы из Access переднего конца
регулирования доступ переднего конец может обновить таблицу при условии, что код VBA для функции доступен для передняя- конечный файл (.accdb, .accde и т. д.). Файл front-end не может напрямую запускать код VBA, который хранится во внутреннем файле (где находится таблица с макросом данных).Нам нужно либо
- копию модуля VBA (ы) с фоновым файла на передний конец файла, или
- использовать ссылку VBA в фронтального файл, чтобы включить код из фоновым:
до 2010 года не способ вызова кода .net? – templaris
Если база данных Access до 2010 года использовалась так же, как и бэкэнда для внешнего интерфейса, вы можете вызывать код .net только в интерфейсе, нет способа инициировать выполнение кода на бэкэнд. –
Хорошо, я могу создать макрос AfterInsert внутри базы данных. Но как я могу запустить внешнюю dll из этого события? Я не вижу никаких действий, таких как RunCode или что-то в этом роде. – templaris