Вызов функции в одном MDB из другого MDB - PullRequest
6 голосов
/ 21 сентября 2009

Мы разработали функцию консолидации, которая будет использоваться другими процессами, и хотим разместить функцию в своем собственном MDB (назовите ее «удаленной»), чтобы к ней можно было обращаться и вызывать из «caller.mdb», когда это необходимо. , Функция предназначена для возврата массива и прекрасно работает, когда выполняется вызывается непосредственно из «удаленного». Тем не менее, при наличии «удаленного», должным образом упоминаемого в проекте VBA «вызывающий», когда «вызывающий» выполняет вызов, функция возвращает ошибки. Мы получаем множество ошибок, таких как

3078: Jet cannot find the input table or query

ВОПРОС. В «удаленном», как правильно установить ссылки на базу данных и ее локальные объекты (например, одну таблицу и несколько запросов, включая запросы INSERT и UPDATE)? CurrentDB, видимо, не является ответом; мы также экспериментировали с объектами AccessObject и CodeData. «Удаленный» и «вызывающий» в настоящее время находятся на одном и том же диске, так что это не будет проблемой.

Ответы [ 4 ]

5 голосов
/ 21 сентября 2009

Вместо CurrentDb вы могли бы использовать с CodeDb, который указывает на mdb, в данный момент выполняющий код.

Set db = CodeDb

3 голосов
/ 22 сентября 2009

Способ, которым сам Access делает это (со всеми мастерами, которые все запрограммированы в Access), заключается в использовании Application.Run. Это означает, что код, который вы вызываете, должен быть функцией, хотя не имеет значения, что он возвращает. Application.Run не требует ссылок, просто путь:

  Application.Run("MyCodeDatabase.MyFunction()")

Очевидно, что если база данных кода находится не в том пути, который использует Access (который включает в себя свои собственные папки приложений (включая папки для приложений в профиле пользователя) и папку, в которой хранится основной интерфейс приложения), вы Вам нужно будет указать полный путь.

Application.Run () - это функция, которая возвращает значение, но оно вводится как вариант. Это может или не может работать с вашим массивом. Из обозревателя объектов неясно, переданы ли аргументы ByVal или ByRef, но если они являются ByRef (что я и ожидал), вы можете просто передать массив и позволить функции работать с ним, а затем использовать после кода в удаленной базе данных.

С другой стороны, аргументы, вероятно, являются вариантами, поэтому нет большой разницы между этим подходом и использованием только структуры, возвращаемой Application.Run ().

1 голос
/ 18 февраля 2012

Существует ряд различий и нюансов для вызова форм и функций через ссылку в другом MDB или ADP. Я столкнулся с проблемами в обеих ситуациях, и то, что вы называете «удаленной» базой данных, я называю центральной библиотекой.

На моей странице "Советы и хитрости" по адресу http://www.mooresw.com/tips.php, у меня есть страницы, посвященные программно меняющимся ссылкам, получению доступа к поиску по указанному файлу вместо разорванной ссылки и вызову форм через ссылку.

При публикации базы данных из среды разработки в пользовательской или производственной среде необходимы программно изменяющиеся ссылки. При работе в папке для разработки нормально, чтобы программа имела ссылку на центральную библиотеку напрямую, но мы бы не хотели, чтобы код, который запускали 20 пользователей, связывал центральную библиотеку в нашей области разработки. (Файл MDB, открытый по ссылке, блокируется так же, как если бы пользователи открывали его напрямую)

Ситуация с запуском формы в центральной библиотеке (или «удаленной» базе данных), где нет ссылок или таблиц, может быть сложной. В этой ситуации я решил открыть соединение с «caller.mdb», используя код ADO со строкой соединения Jet в событии open форм. Это дает возможность коду в форме (или функциям в библиотеке) получить доступ к таблицам и запросам в вызывающей базе данных.

Для получения дополнительной информации см. Мои страницы по приведенной выше ссылке на советы, в частности, см .:

http://www.mooresw.com/call_a_form_in_another_MDB_through_a_reference.php

который, я считаю, наиболее актуален для вашей ситуации.

1 голос
/ 21 сентября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...