Макросы данных в MS Access не работают с SQL-запросами из JAVA
Я создал базу данных (MS Access) и интерфейс с JavaFX.
В одной таблице я реализую макрос данных, который запускает события INSERT в другом столбце (CurrentUser()-Function). Я тестировал макрос данных по-разному (создал строку непосредственно в MS Access, создал VBA-код с SQL-Insert-Query), и каждый раз, когда мой триггер работает.
Также у меня хорошо работает Java-интерфейс (SQL INSERT для MS Access). Но проблема в том, что макросы данных не работают таким образом.
Я предполагаю, что существует корреляция между бэкэнд-обновлением из MS Access и макросами данных, потому что всякий раз, когда я выполняю команду SQL-Insert-Command с моим JavaFX-интерфейсом, MS Access не показывал мне новую строку в таблице (Обновление таблицы не может решить эту проблему). Мне нужно сначала закрыть MS Access, чтобы увидеть мои новые вставки таблицы (конечно, без вставки триггера:-)).
Есть ли возможность решить проблему?
Буду признателен за любую помощь! Спасибо
1 ответ
Так называемые макросы данных, конечно, очень похожи на триггеры таблиц. Они могут и должны работать без необходимости запуска или даже наличия копии Access на компьютере.
Однако если макрос данных использует "любую" функцию VBA, то такой макрос будет работать ТОЛЬКО в том случае, если вы запустили Access.
Таким образом, вы должны отказаться от использования =CurrentUser(), так как это похоже на функцию VBA.
Таким образом, МОМЕНТАЛЬНО вы начинаете использовать функции VBA, то есть тот момент, когда те триггеры таблицы, события и код, который вы пишете, НЕ будут работать. (т.е.: не работает, если не запускается из Access). Таким образом, макросы данных ДЕЙСТВИТЕЛЬНО работают ТОЧНО, если они используются другими системами (FoxPro, Vb6 или чем-то еще). Просто вы не можете вводить код VBA, когда делаете это.
Хотя вы "можете" вызывать или использовать код VBA из этих табличных триггеров, настоятельно рекомендуется не делать этого.
Поэтому, если вы откроете базу данных Access, скажем, с помощью Vb6, vb.net, FoxPro и т. Д., Вы сможете обновить данные, и код макрокоманды, который у вас есть, БУДЕТ запускаться и выполняться.
Однако тот Vb6, FoxPro (ваш java) и т. Д. НЕ использует код VBA (Visual Basic For Applications) и, таким образом, недоступен для механизма обработки данных.
Если ваш код событий таблицы (макросы данных) использует какой-либо внешний код VBA, то вы можете использовать ТОЛЬКО Access в качестве средства для обновления такой таблицы, поскольку в любой другой системе не будет доступных библиотек VBA и кода.
Фактически, вы можете установить струю (теперь она называется ACE) как отдельную установку на 100%. Таким образом, ядро базы данных Access (ACE) не требует установки VBA на целевой компьютер для того кода процедурной таблицы, который вы пишете. Также не требуется устанавливать копию Access.
Таким образом, если ваши макросы данных ссылаются или используют какую-либо внешнюю функцию VBA, то ЕДИНСТВЕННЫМ клиентом, который может обновлять таблицы, будет Access, поскольку никакой другой интерфейс не может предоставить "службу выражений", которая будет разрешать библиотеку кода VBA и систему.,
И нет функции макроса данных, которая получает текущего пользователя. Таким образом, единственный способ добиться этого - иметь некоторый код при запуске, который устанавливает "текущего пользователя" в таблицу (скажем, 1 запись). Макрос данных может затем прочитать эту 1 запись из таблицы, чтобы получить "текущего пользователя". Конечно, эта установка не будет работать в многопользовательской настройке, но для локального файла это может быть солитон типа "kluge".
Это также означает, что ваш код запуска (VB6, Java и т. Д.). Вы пишете код, который должен обновить эту "пользовательскую" таблицу с 1 строкой, в которой есть текущий пользователь - вы не можете получить эту информацию из макроса данных, насколько мне известно.
Однако, хотя текущий пользователь НЕ доступен в макросе данных, он доступен в стандартном макросе, не являющемся таблицей.
Однако макросы данных (таблиц) имеют ТОЛЬКО локальные переменные. Если макрос данных может вызывать пользовательские макросы, то вы можете сделать это.
Таким образом, вы не можете вызывать или использовать код VBA из макросов данных - они вводят внешнюю зависимость от VBA, которая недоступна, пока не загружен Access.
Макросы данных являются автономными маршрутами - и они выполняются даже при наличии обновлений вне приложения Access. Однако механизм обработки данных не загружается и не использует VBA, когда используется вне внешних интерфейсов Access.