PDA

Vollständige Version anzeigen : aus Accdb ext. ADP öffnen


avogt_at_home
27.10.2011, 19:48
Hallo,
ich möchte aus einer Accdb heraus eine laufende ADP öffnen, ein bestimmtes Formular öffnen, und ein ein Feld ein bestimmten Wert eintragen, und zuletzt eine Prozedur ausführen.
Dazu habe ich folgenden Code:

Private Declare Function apiSetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long
Private Declare Function apiShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Const SW_MAXIMIZE As Long = 3
Private Const SW_NORMAL As Long = 1
...
Public Sub OpenRemoteForm(MDBFile As String, FormName As String, FieldName As String, FieldContent As String, Optional ViewMode As Long = acViewNormal)
Dim frm As Form
Dim appAccess As Access.Application

On Error GoTo OpenRemoteForm_Error

If Len(Dir(MDBFile)) > 0 Then
Set appAccess = New Access.Application
With appAccess
apiSetForegroundWindow .hWndAccessApp
apiShowWindow .hWndAccessApp, SW_NORMAL
.OpenCurrentDatabase MDBFile
.DoCmd.OpenForm FormName, ViewMode
Set frm = .Forms(FormName)
frm(FieldName).Value = FieldContent
.Run frm.cmdOK_Click()
End With
Set appAccess = Nothing
End If

On Error GoTo 0
Exit Sub

OpenRemoteForm_Error:
MsgBox "Fehler " & Err.Number & " (" & Err.Description & ") in Procedur OpenRemoteForm des Moduls mdlFunctions"
End Sub

Lokal mit einer MDB getestet funktioniert alles perfekt auf Access 2010.
Beim Kunden auf Access 2007 Runtime funktioniert das nicht, und die Fehlerbehandlung in oberer Routine sagt folgendes:

"Fehler 429 (Objekterstellung durch ActiveX Komponente nicht möglich)"
Habt ihr eine Idee was da falsch laufen könnte? Ist es überhaupt möglich von Accdb auf ADP zuzugreifen?

Gruß Andreas

ebs17
27.10.2011, 21:43
Ich habe noch nie Acc2007 und ADP´s und Runtimes verwendet, aber wenn ich mich recht entsinne, ist es unter der Runtime nicht möglich, eine neue Access-Instanz zu öffnen (New, CreateObject). Ausweg: Access öffnen mit Shell und nachfolgend mit GetObject die Instanz ermitteln und verwenden.

Bei einer laufenden Anwendung würde ich aber auch nicht versuchen, über eine neue Instanz Zugriff gewinnen zu wollen, sondern mir direkt mit GetObject eine Referenz zu holen.
Dim oAcc As Access.Application
Set oAcc = GetObject("c:\...\Zweite.mdb")

Louisleon
27.10.2011, 22:20
Wie Eberhard schon sagte, eine Runtime kann keine neu Access-Instanz initieren.
Allerdings würde ich den Code wie folgt abändern:
Dim oAcc As Object
Set oAcc = GetObject("c:\...\Zweite.mdb","Access.Application")
Mehr Informationen in der MSDN zu GetObject (http://msdn.microsoft.com/de-de/library/e9waz863(v=vs.80).aspx)

Gruß

LL

avogt_at_home
27.10.2011, 23:14
OK, danke euch.
Werde ich mal testen und hören was der Kunde meint.

Gruß Andreas