Макросы данных в MS Access не работают с SQL-запросами из JAVA - PullRequest
0 голосов
/ 08 октября 2018

Я создал базу данных (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 Ответ

0 голосов
/ 09 октября 2018

Так называемые макросы данных, конечно, очень похожи на триггеры таблиц.Они могут и должны работать без необходимости запуска или даже иметь копию Access, работающую на компьютере.

Однако, если макрос данных использует «любую» функцию VBA, то такой макрос будет работать ТОЛЬКО, если вы запустилиAccess.

Таким образом, вы должны отказаться от использования = CurrentUser (), поскольку это, кажется, функция VBA.

Итак, МОМЕНТАЛЬНО вы начинаете использовать функции VBA, то есть в тот момент, когда эти таблицытриггеры, события и код, который вы пишете, НЕ будут работать.(т.е.: не работает, если не запускается из Access).Таким образом, макросы данных ДЕЙСТВИТЕЛЬНО работают ТОЧНО, если они используются другими системами (FoxPro, Vb6 или чем-то еще).Просто вы не можете вводить код VBA, когда делаете это.

Хотя вы «можете» вызывать или использовать код VBA из этих табличных триггеров, настоятельно рекомендуется не делать этого.

Поэтому, если вы откроете базу данных Access, скажем, с помощью Vb6 vb.net, FoxPro и т. д., вы можете обновлять данные, и код макрокоманды, который у вас есть, БУДЕТ запускаться и выполняться.

Однако, что Vb6, FoxPro (ваш java) и т. Д. НЕ используют код VBA (Visual Basic для приложений) и, следовательно, недоступны для механизма обработки данных.

Если вашКод событий таблицы (макросы данных) использует любой внешний код VBA, поэтому вы можете использовать ТОЛЬКО Access в качестве средства для обновления такой таблицы, поскольку в любой другой системе не будет доступных библиотек VBA и кода.

Фактически выможно установить струю (теперь называется ACE) в качестве отдельной установки на 100%.Таким образом, ядро ​​базы данных Access (ACE) не требует установки VBA на целевой компьютер для написанного кода процедурной таблицы.Также не требуется устанавливать копию Access.

Таким образом, если ваши макросы данных ссылаются или используют какую-либо внешнюю функцию VBA, то ЕДИНСТВЕННЫМ клиентом, который может обновлять таблицы, будет Access, поскольку никакой другой интерфейс не может предоставить «службу выражений», которая разрешитбиблиотека кодов VBA и система.

И нет функции макроса данных, которая получает текущего пользователя.Таким образом, единственный способ добиться этого - иметь некоторый код при запуске, который устанавливает «текущего пользователя» в таблицу (скажем, 1 запись).Макрос данных может затем прочитать эту 1 запись из таблицы, чтобы получить «текущего пользователя».Конечно, эта настройка не будет работать в многопользовательской настройке, но для локального файла это может быть солитон типа «kluge».

Это также означает, что ваш стартовый код (VB6, Java и т. Д.).Вы пишете код, который должен обновить эту «пользовательскую» таблицу с 1 строкой, в которой есть текущий пользователь - вы не можете получить эту информацию из макроса данных, насколько мне известно.

Однако, пока текущий пользовательНЕ доступно в макросе данных, оно доступно в стандартном макросе, не являющемся таблицей.

Однако макросы данных (таблиц) имеют ТОЛЬКО локальные переменные.Если макрос данных может вызывать пользовательские макросы, то вы можете сделать это.

Таким образом, вы не можете вызывать или использовать код VBA из макросов данных - они вводят внешнюю зависимость от VBA, которая недоступна, пока не загружен Access.

Макросы данных являются автономными маршрутами - и они запускаются даже при наличии обновлений вне приложения Access.Однако механизм обработки данных не загружается и не использует VBA при использовании за пределами внешних интерфейсов Access.

...