Ms Access Data Macro Вызов функции VBA из коробки
Я использую Data Macro
для одного из моих столов доступа After Insert
событие. Внутри этого макроса данных я использую SetLocalVar
вызвать одну из моих функций, написанных на vba, чтобы вставить тот же самый вставленный набор записей в мою базу данных SQL.
Это работает при вводе данных в Access, однако, если я вставляю запись из одного из моих приложений на C#, событие after insert не вызовет мою функцию Access, потому что я не открываю экземпляр моего приложения Access.
Может быть, это After Insert
событие может как-то вызвать мою функцию VBA, даже если запись вставлена из-за пределов доступа?
1 ответ
Макросы данных находятся в ядре базы данных "асе" и, таким образом, работают подобно процедурам хранения на сервере SQL. Однако, если вы вызываете + используете подпрограммы VBA (что допустимо), вы вводите зависимость VBA, и эта настройка работает ТОЛЬКО из Access. Таким образом, если вы откроете таблицу через ODBC или любым другим способом из FoxPro или даже.net, процедуры хранилища Access будут ВСЕ ЕЩЕ работать, но зависимость VBA не будет работать и требует доступа. Таким образом, вы можете установить ядро базы данных (формально JET, теперь называется ACE). Установка механизма данных, как мы делали это в течение многих лет, НЕ устанавливает VBA и не использует ядро базы данных и не полагается на VBA.
Таким образом, макросы данных и код запуска данных будут работать, скажем, с C#. Однако для вызова кода VBA требуется установить Access (который устанавливает VBA). И более важным является момент, когда у вас есть такие триггеры, вызов кода VBA - это момент, когда вы ДОЛЖНЫ ТОЛЬКО обновить данные из Access.
Таким образом, циклические и хранимые процедуры, доступные в ACE, могут даже вызывать другие хранимые процедуры, если они написаны только на макроязыке DATA.
Наличие таких триггеров таблиц, вызывающих код VBA, означает, что в дополнение к установке механизма базы данных у вас также будет зависимость от VBA. Таким образом, хотя вы можете вызывать код VBA, такая настройка работает ТОЛЬКО при использовании MS-Access в качестве клиентской программы.
Таким образом, вы должны переписать код VBA как код макроса данных, если вы хотите, чтобы обновление происходило из C# или других внешних языков.
У вас есть "большинство" функций VBA, но у вас нет наборов записей (вы используете для каждой из них).
редактировать: я также должен отметить, что, поскольку вы не можете вызывать VBA при использовании ACE из C#, другой путь - использование макроса данных для связанной таблицы с сервером SQL, но макросы данных не могут работать со связанными (внешними) таблицами. Так что ваши настройки наверняка могли бы работать, если бы данные обновлялись из Access. Однако, используя FoxPro, VB, vb.net, C# и т. Д. DOES разрешает и запускает код макроса данных, поэтому в этих случаях нельзя вызывать код макроса данных VBA или любой другой вид внешнего кода - и для обновления SQL потребуется внешний код. сервер, поскольку макросы данных работают ТОЛЬКО на локальных собственных таблицах (почти то же самое и для триггеров SQL)