|
|
|
| Я тут у 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
|
Моя база находится вместе с вызываемой базой в одной папке. Вызываю двойным нажатием в поле:
db1 - конечная база
путь как я понимаю не нужен тк все в одной папке.
Если минутка времени обратите внимание на мои ошибки | |
|
| |
|
|
|
| А так?
OpenFile1 ("\db1.mdb") | |
|
| |
|
|
|
| а так появляется "Ошибка 28: В стеке не хватает памяти"
в этой строчке | |
|
| |
|
|
|
| еще есть такой вариант, он попроще может стоить на него обратить внимание ?
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
|
| |
|
| |
|
|
|
| Хотелось бы понимать цель открытия второго приложения. | |
|
| |
|
|
|
| А если закоментировать эту строчку
'StartOfFile ("") | |
|
| |
|
|
|
| да.... это актуально.. закоментировал! и заработало! классно , спасибо !(я раньше ее тоже закоментировал но потом разкоментировал так бы не мучал вас) Вы мне не подскажете еще если я в открывшейся базе захочу перейти на какуето конкретную запись в форме, как правильно это сделать? | |
|
| |
|
|
|
| Если имеется ввиду, что переход надо осуществить программно из первого приложения, то при таком способе открытия второго приложения не знаю как.
Почему и задавал вопрос:
Хотелось бы понимать цель открытия второго приложения. | |
|
| |
|
|
|
| открывать нужно для того что бы не совмещать все БД в одну. Достаточно сделать связанные внешние данные. Поэтому я и хочу что бы например юзер кликал на ФИО загружалась другая БД и открывалась форма уже на этом ФИО | |
|
| |
|
|
|
| А что если попробовать так:
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 и дописать обработчик ошибок | |
|
| |
|
|
|
| После замены строки
intResult = ShellExecute(Application.hWndAccessApp, "open", strNameFile, 0, 0, SW_SHOWNORMAL)
на строку
intResult = ShellExecute(Application.hWndAccessApp, "open", per1, 1, 1, 1)
здесь per1 - аналог strNameFile
у меня все нормально заработало | |
|
| |