2016-09-16 2 views
2

Можно ли каким-либо образом вызвать код C# из файла базы данных MS Access (а не приложения Access)?Вызов кода C# из макроса данных Access, управляемого событиями?

Мой сценарий - когда что-то произойдет в какой-либо таблице, я должен вызвать код C# (например, веб-службу).

Я читал, что MS Access не поддерживает триггеры, но у него есть процедуры или что-то вроде Data Macros.

Я еще не знаю версию доступа.

ответ

3

Массивы данных были введены в MS Access 2010 и да, вы можете вызывать функции dll, созданные в C# из кода VBA. Макросы данных вызывают функцию VBA в Access, VBA вызывает функцию dll C# или запускает внешнее приложение с помощью команд оболочки.

UPDATE

К сожалению, это невозможно запустить какой-либо код VBA из DataMacro, если используется внешний интерфейс без доступа, доступа необходимо окружение для выполнения кода, если таблица изменена через ODBC с помощью приложения без доступа, охрана окружающей среды не существует, и выполнение не удастся.

+0

до 2010 года не способ вызова кода .net? – templaris

+0

Если база данных Access до 2010 года использовалась так же, как и бэкэнда для внешнего интерфейса, вы можете вызывать код .net только в интерфейсе, нет способа инициировать выполнение кода на бэкэнд. –

+0

Хорошо, я могу создать макрос AfterInsert внутри базы данных. Но как я могу запустить внешнюю dll из этого события? Я не вижу никаких действий, таких как RunCode или что-то в этом роде. – templaris

2

В дополнении к ответу Сергея, событийные данные Макросы в Access может вызывать только функции VBA, если

  1. таблица обновляются с Microsoft Access самой (MSACCESS.EXE) и
  2. код 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 в фронтального файл, чтобы включить код из фоновым:

Reference.png

+0

Хорошо еще один вопрос к этому. В выражении builder находится раздел Web Service - я не могу найти какую-либо документацию. Имя предполагает, что макрос может подключаться к веб-службе. Но я ошибаюсь, конечно? – templaris

+0

Похоже, что это одна из функций Access, которая связана с ее интеграцией с Web/SharePoint и плохо документирована. Существует статья «Поддержка тизер» Microsoft Support [здесь] (https://support.office.com/en-us/article/Create-a-Web-Service-data-connection-5ce2738f-bf36-4490-a015-d1745d102bb8), который является очень коротким по деталям, и есть поток [здесь] (https://social.msdn.microsoft.com/Forums/office/en-US/45e4904a-64af-40bf-bcd0-ec7e5df175a9/access-2010 -linking-to-data-services-what-a-data-services-connection-definition-xml? forum = accessdev), который показывает, насколько не понятна эта функция. –

+1

Я также должен добавить, что ссылка на веб-службу НЕ является какой-то способностью использовать определение WSDL для веб-сервисов, но конкретная веб-служба данных сосредоточена вокруг sharepoint. Таким образом, доступ как инструмент не содержит инструментов или функций для использования веб-службы в общем смысле этого термина. –

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