Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Подскажите
 
 автор: час   (14.01.2008 в 13:21)   личное сообщение
 
 


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
"всё работает" - ошибок в смысле нет.
Но и результатов тоже нет.
Как мне пользоваться результатами вычислений?

  Ответить  
 
 автор: palarm   (14.01.2008 в 16:32)   личное сообщение
 
 

Странно... Я вообще то проще делаю - подключаю библиотекчный модуль в Tools - References и все работает. В смысле в проекте становятся видимыми все модули, функции, констатны из библиотеки, словно они в общем модуле проекта.
Правда есть нюансы по поводу видимости друг друга.

  Ответить  
 
 автор: час   (14.01.2008 в 19:20)   личное сообщение
 
 

Цитата:

Вы можете свой библиотечный файл положить в каталог с msaccess.exe и вызывать процедуры, используя Run.
В этом случае и Reference не нужны и перекомпиляция (новая копия) не страшны 
  Serge_Gavrilov (39)  20.10.2004 11:10 

  Ответить  
 
 автор: час   (14.01.2008 в 19:22)   личное сообщение
 
 

Цитата:

По этому принципу многие виззарды Access запускаются.
Вызов
Application.Run "FileName.ProcedureName"
(FileName - имя файла без расширения)
Необходимые условия:
Файл должен иметь расширение mda или mde (хоть и на самом деле может быть и mdb)
Имя проекта должно точно совпадать с имененем файла.

  Ответить  
 
 автор: час   (14.01.2008 в 19:23)   личное сообщение
 
 

Цитата:

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 

  Ответить  
 
 автор: час   (14.01.2008 в 19:25)   личное сообщение
 
 

Я положил MDE в папку к Access Чтобы не подключать ссылку, но ничё хорошего пока не вышло...

  Ответить  
 
 автор: час   (14.01.2008 в 19:27)   личное сообщение
 
 

А вот тута я запутался ...

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

  Ответить  
 
 автор: Serge Gavrilov   (14.01.2008 в 22:19)   личное сообщение
 
 

А вот тута я запутался ...
а в чем именно?

  Ответить  
 
 автор: palarm   (14.01.2008 в 21:09)   личное сообщение
 
 

Я ложу свою 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 когда так же как и ты додумался о переносе всего стандатного в библиотеку. Здорово помогает ускорять разработку.

  Ответить  
 
 автор: Serge Gavrilov   (14.01.2008 в 22:17)   личное сообщение
 
 

А зачем вы делаете

appAccess.OpenCurrentDatabase "C:\Program Files\Microsoft Office\Office10\библиотека.mde", False 

я про это ничего не писал

  Ответить  
 
 автор: час   (15.01.2008 в 08:11)   личное сообщение
 
 

Это точно, Сергей про это я сам написал.
Вы писали только в цитатах...
Но может разжуёшь мне.
В папке с Аксесом лежит Модули.МДЕ, в ней функция (к примеру проверка наличия запроса).
Как мне ею воспользоваться в текущей Программа.МДБ?

  Ответить  
 
 автор: Serge Gavrilov   (15.01.2008 в 09:49)   личное сообщение
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)

  Ответить  
 
 автор: час   (15.01.2008 в 13:46)   личное сообщение
 
 

Спасибо огромное, Сергей.
Для нас, для бестолковых - самое то, что надо...
Конкрет пример.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList