Ограничения для библиотечных функций MDB/MDE
MikeLed
Дата: 18.11.2009 12:18:43
Решил отделить "мух от колет", т.е. создать некий CommonFunc.mdb (mde) и подключить и использовать как библиотеку.
Натолкнулся на то, что фунукция DLookup некорректно работает с таблицей из CommonFunc.mdb.
Это ограничение, сязанное с CurrentDB или я чего-то не догоняю?
И как с этим лучше бороться?
Решение лежащее на поверхности - писать свою функцию MyDLookup, соответственно используя CodeDB?
А какие еще ограничения, кроме CurrentDB/CodeDB?
Rivkin Dmitry
Дата: 18.11.2009 12:48:31
MikeLed,
Пример приведи некорректнй работы. А то как-то на пальцах не понятно
MikeLed
Дата: 18.11.2009 13:11:59
Есть основная база, так называемое приложение: Appl.mdb
Есть подключенная к ней через reference CommonFunc.mdb
И обеих имеются какие-то таблицы, как локальные, так и ссылки на DATA.mdb.
Таблица "Сотрудники" прилинкована в CommonFunc.mdb.
В CommonFunc.mdb есть функция CheckUser, определяющая текущее состояние пользователя как сотрудника, фактически
Public CheckUser() as String
....
xx=DLookup("Состояние", "Сотрудники" ,"Код=" & CurrentUser)
...
DLookup вылетает с ошибкой, что табл."Сотрудники" на определена (или чтот в этом роде), у меня обработчик который выдает другое сообщение.
Если таблицу "Сотрудники" разместить в Appl.mdb, то все работает корректно.
Rivkin Dmitry
Дата: 18.11.2009 13:50:08
Думаю, так не получится. Акс в любом случае DLookup проверяет на текущей БД, потому и не находит таблицу. Придется заменить рекордсетом на CodeDb базе. Кода на три строчки больше, но, зато, все корректно. И дополнительно в одном запросе можно получить все данные о сотруднике, а не только состояние его
MikeLed
Дата: 18.11.2009 14:03:15
Rivkin Dmitry |
в одном запросе можно получить все данные о сотруднике, а не только состояние его |
Сомнительное преимущество.
запросы на то и придуманы, чтобы все не таскать.
А MS мог бы пойти дальше -
<ИмяБД>.<ИмяТаблицы>.
А мне, чем перелопачивать текст, проще линковать таблицы в обе базы.
Правда, не знаю чем чревато.
ILL HEAD
Дата: 18.11.2009 14:11:14
MikeLed |
MS мог бы пойти дальше - <ИмяБД>.<ИмяТаблицы> |
Он уже там
SELECT * FROM Таблица1 IN "C:\test.mdb"
MikeLed
Дата: 18.11.2009 14:23:33
ILL HEAD,
Ага, только в функциях забыли...
MikeLed
Дата: 18.11.2009 15:13:57
ILL HEAD, и еще нафига мне 'IN "C:\test.mdb"', если все внутри проекта или библиотеки прилинковано. Запрос же полезет к внешнему файлу, еще и пути тащить придется.
Ну, с функциями все понятно.
Поскажите, как лучше поступить с талицами для форм, отчетов...
Т.е. хочется вынести в библиотеку общие справочники (формы и отчеты по их сопровождению).
Подключать библиотеку к разным приложениям.
В тоже время эти таблицы используются в самих модулях (например, для создания раскрывающихся списков).
Сами таблицы хранятся в отдельный БД и линкуются.
Замечу, что все это делается из рабочих приложений. Просто количество общих данных, форм и отчетов растет. Естественно что источники зачастую указаны в свойствах объектов.
Напрашивается решение линковать таблицы и в библиотечной БД, и в приложениях.
Но мне такое решение как-то не нравится.
Помогите...
Фесенко Олег
Дата: 07.06.2012 17:18:56
Rivkin Dmitry |
---|
Акс в любом случае DLookup проверяет на текущей БД, потому и не находит таблицу. Придется заменить рекордсетом на CodeDb базе |
+1 . Сам напоролся на этот DLookUp. Нужно быть осторожнее при вызове его во внешних модулях