|
|
|
|
Private Sub RunAccessSub()
Dim ot As String
Dim appAccess As Access.Application
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase "C:\Program Files\Microsoft Office\Office10\библиотека.mde", False
'MsgBox appAccess.Run "библиотека.НаличиеЗапроса", "Q1"
appAccess.Run "библиотека.НаличиеЗапроса", ""
appAccess.Run "библиотека.Пропись", "23"
Set appAccess = Nothing
End Sub
|
Вот код - выполняются функции расположенные в MDE
"всё работает" - ошибок в смысле нет.
Но и результатов тоже нет.
Как мне пользоваться результатами вычислений? | |
|
| |
|
|
|
| Странно... Я вообще то проще делаю - подключаю библиотекчный модуль в Tools - References и все работает. В смысле в проекте становятся видимыми все модули, функции, констатны из библиотеки, словно они в общем модуле проекта.
Правда есть нюансы по поводу видимости друг друга. | |
|
| |
|
|
|
| Цитата:
Вы можете свой библиотечный файл положить в каталог с msaccess.exe и вызывать процедуры, используя Run.
В этом случае и Reference не нужны и перекомпиляция (новая копия) не страшны
Serge_Gavrilov (39) 20.10.2004 11:10
|
| |
|
| |
|
|
|
| Цитата:
По этому принципу многие виззарды Access запускаются.
Вызов
Application.Run "FileName.ProcedureName"
(FileName - имя файла без расширения)
Необходимые условия:
Файл должен иметь расширение mda или mde (хоть и на самом деле может быть и mdb)
Имя проекта должно точно совпадать с имененем файла.
|
| |
|
| |
|
|
|
| Цитата:
Re[1]: Метод Run хорош если это не функция типа Sinus(x), т.е. не нужно ничего возвращать
Ну, возвращать-то значение можно через аргументы ByRef. Никаких проблем.
Serge_Gavrilov (16) 21.10.2004 18:33
Можно привести поясняющий пример работы ByRef ?
ee (7) 22.10.2004 11:47
Re: *.mde как библиотечный файл ?
Процедура в библиотеке
Function test(strInput as string, strOutput as string)
strOutput = strInput
End Function
Вызов
Dim str as String
Run "ИмяФайла.test" "Работает!", str
msgbox str
Serge_Gavrilov (17) 22.10.2004 13:51
|
| |
|
| |
|
|
|
| Я положил MDE в папку к Access Чтобы не подключать ссылку, но ничё хорошего пока не вышло... | |
|
| |
|
|
|
| А вот тута я запутался ...
Function test(strInput as string, strOutput as string)
strOutput = strInput
End Function
|
Вызов
Dim str as String
Run "ИмяФайла.test" "Работает!", str
msgbox str
|
Serge_Gavrilov (17) 22.10.2004 13:51 | |
|
| |
|
|
|
| А вот тута я запутался ...
а в чем именно? | |
|
| |
|
|
|
| Я ложу свою LibFrm.mde в каталог, куда ставлю программу и ссылку к ней подключаю.
Просто есть нюансы:
1. Чтоб обратиться текстом запроса к таблице основного проекта можно воспользоваться IN
Sub sFormRequery()
strSQL = "SELECT [" & strTableName & "].id, [" & strTableName & "].Name, [" & strTableName & "].ДатаСоздания, [" & strTableName & "].ДатаИзменения, [" & strTableName & "].Изменил " & _
"FROM [" & strTableName & "] IN '" & strCurrentPath & "'"
strSQL1 = " ORDER BY [" & strTableName & "].Name"
Me.subFrm.Form.RecordSource = strSQL & strSQL1
End Sub
|
Dlookup(), Dsum() и т. д. выполняемые в библиотечном модуле "видят" таблицы основного проекта - потому что проект то по сути один - ОБЩИЙ. Отсюда правда косяк - не выйдет делать update (новую версию) проекта простой заменой LibFrm.mde - при любом изменении в библиотечном модуле, если основой проект - Mde - его заново придется перекомпиливать.
2. Шапка модлей класса в библиотеке должна быть такой
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
END
Attribute VB_Name = "clsFormSpraw"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
|
В смысле в окне VBA File - Export file
Вообще, я эту тему подымал на SQL.ru когда так же как и ты додумался о переносе всего стандатного в библиотеку. Здорово помогает ускорять разработку. | |
|
| |
|
|
|
| А зачем вы делаете
appAccess.OpenCurrentDatabase "C:\Program Files\Microsoft Office\Office10\библиотека.mde", False
|
я про это ничего не писал | |
|
| |
|
|
|
| Это точно, Сергей про это я сам написал.
Вы писали только в цитатах...
Но может разжуёшь мне.
В папке с Аксесом лежит Модули.МДЕ, в ней функция (к примеру проверка наличия запроса).
Как мне ею воспользоваться в текущей Программа.МДБ? | |
|
| |
|
9 Кб. |
|
| Попробую на конкретном примере
Извлеките из архива lib.mde и положите его в каталог, где находится ваш msaccess.exe
В Программа.МДБ в стандартном модуле пишите, например, функцию:
Function Test(byval vstrQueryName As String) As Boolean
Dim bExists As Boolean
Application.Run "lib.IsQueryExists", Application, vstrQueryName, bExists
Test = bExists
End Function
|
Это лишь пример для проверки работы.
Код файла lib.mde вы можете посмотреть (на самом деле это mdb) | |
|
| |
|