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

Форум: MS ACCESS

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

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

 
 

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

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

тема: запуск приложения из базы ACCESS 2002
 
 автор: SergeyKV   (09.12.2008 в 15:52)   личное сообщение
 
 

Я тут у akkorn'а утянул код который он позиционировал как универсальный для запуска приложения будь то офис, эксель и тд. Утащить то я утощил но тут возникли некоторые ошибки. Я так понимаю что код рабочий конечно просто я своими мозгами не догнал куда что прописать.

Option Compare Database
Option Explicit
'для FileUtils_IsFilePresent2()
Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long
'для StartOfFile
Public Declare Function ShellExecute _
                Lib "shell32.dll" _
                Alias "ShellExecuteA" _
                (ByVal hwnd As Long, _
                ByVal lpOperation As String, _
                ByVal lpFile As String, _
                ByVal lpParameters As String, _
                ByVal lpDirectory As String, _
                ByVal nShowCmd As Long) As Long
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_SHOWDEFAULT = 10
Public Const SW_SHOWNOACTIVATE = 4
Public Const SW_SHOWNORMAL = 1
'для подстановки пути
Function PathToFiles() As String
PathToFiles = Application.CurrentProject.Path & ""
End Function
'проверка наличия файла
Function FileUtils_IsFilePresent2(ByVal strFileName As String) As Boolean
FileUtils_IsFilePresent2 = PathFileExists(strFileName)
End Function
'запуск файла
Function StartOfFile(strNameFile As String)
'Вызывается так
StartOfFile ("")
Dim intResult As Integer
intResult = ShellExecute(Application.hWndAccessApp, "open", strNameFile, 0, 0, SW_SHOWNORMAL)
If intResult = 31 Then
    MsgBox "Незарегестрированный тип файла", , "((("
End If
End Function
'основная рабочая функция
Function OpenFile1(Optional FileName As String)
If FileName = "" Then
MsgBox "Не задано имя файла..", , "Упс!"
GoTo End01
End If
If FileUtils_IsFilePresent2(PathToFiles & FileName) = True Then
StartOfFile (PathToFiles & FileName)
Else
MsgBox "    Данный          файл" & vbCrLf & "изволит отсутствовать..", , "' " & FileName & " '"
End If
End01:
End Function


Моя база находится вместе с вызываемой базой в одной папке. Вызываю двойным нажатием в поле:

OpenFile1 ("db1")


db1 - конечная база
путь как я понимаю не нужен тк все в одной папке.

Если минутка времени обратите внимание на мои ошибки

  Ответить  
 
 автор: Lukas   (09.12.2008 в 16:06)   личное сообщение
 
 

А так?
OpenFile1 ("\db1.mdb")

  Ответить  
 
 автор: SergeyKV   (09.12.2008 в 16:15)   личное сообщение
 
 

а так появляется "Ошибка 28: В стеке не хватает памяти"

StartOfFile ("") 
в этой строчке

  Ответить  
 
 автор: SergeyKV   (09.12.2008 в 16:17)   личное сообщение
 
 

еще есть такой вариант, он попроще может стоить на него обратить внимание ?

Public Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long

Public Const SW_SHOWMAXIMIZED = 1
Public Const AttachmentsPath = "i:\attachments"

Public Sub RunFile(FileName As String)
Dim l As Long
Dim st As String

st = FileName
l = ShellExecute(0, "open", st, "", "", SW_SHOWMAXIMIZED)

End Sub

  Ответить  
 
 автор: Lukas   (09.12.2008 в 16:25)   личное сообщение
 
 

Хотелось бы понимать цель открытия второго приложения.

  Ответить  
 
 автор: Lukas   (09.12.2008 в 16:22)   личное сообщение
 
 

А если закоментировать эту строчку
'StartOfFile ("")

  Ответить  
 
 автор: SergeyKV   (09.12.2008 в 16:39)   личное сообщение
 
 

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

  Ответить  
 
 автор: Lukas   (09.12.2008 в 16:52)   личное сообщение
 
 

Если имеется ввиду, что переход надо осуществить программно из первого приложения, то при таком способе открытия второго приложения не знаю как.
Почему и задавал вопрос:
Хотелось бы понимать цель открытия второго приложения.

  Ответить  
 
 автор: SergeyKV   (09.12.2008 в 17:05)   личное сообщение
 
 

открывать нужно для того что бы не совмещать все БД в одну. Достаточно сделать связанные внешние данные. Поэтому я и хочу что бы например юзер кликал на ФИО загружалась другая БД и открывалась форма уже на этом ФИО

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

А что если попробовать так:

Public Function OpenOtherDB(strFileDBName As String)
Dim appAccess as Object
Dim strFiltr As String
strFiltr ="Тут Ваш фильтр на запись"
Set appAccess = CreateObject("Access.Application")
    appAccess.OpenCurrentDatabase strFileDBName, True
' здесь добавил
    appAccess.DoCmd.OpenForm "FormName", , , strFiltr, , acDialog
    appAccess.CloseCurrentDatabase
    appAccess.DoCmd.Quit
    Set appAccess = Nothing
Exit Function

Это голый скелет, необходимо проверять наличие файла strFileDBName и дописать обработчик ошибок

  Ответить  
 
 автор: FORMAT   (09.12.2008 в 17:45)   личное сообщение
 
 

После замены строки
intResult = ShellExecute(Application.hWndAccessApp, "open", strNameFile, 0, 0, SW_SHOWNORMAL)
на строку

intResult = ShellExecute(Application.hWndAccessApp, "open", per1, 1, 1, 1)

здесь per1 - аналог strNameFile

у меня все нормально заработало

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