Avatar billede pecl Nybegynder
28. februar 2003 - 10:42 Der er 9 kommentarer og
1 løsning

Åbne en formular i en anden accessdatabase

Kan man fra en access DB åbne en bestemt formular i en anden acces DB via f.eks en knap.
Og hvordan er syntaksen til det ?
28. februar 2003 - 10:46 #1
Du kan kun åbne den på 2 måder:
1) Ved at åbne hele den anden database i en ny instans af Access. Det kræver dog at databasen er forberedt på at skulle åbne præcis den formular. Der er forskellige måder at gøre dette (ingen af dem særlig simple)

2) Lav den anden database om til en .mde-fil. Derved kan du lave en reference fra VB til databasen, hvorved du får direkte adgang til alle formularer m.m. i den anden database.
Avatar billede pecl Nybegynder
28. februar 2003 - 11:14 #2
>thomasjepsen
2) Hvordan får man den direkte adgang til forms og rapporter i .mde filen. Jeg har lavet en reference til basen og den optræder i objektoversigten. Hvordan komer jeg videre herfra ?
28. februar 2003 - 11:16 #3
Du burde nu bare kunne skrive (i VBA):
Docmd.Openform "Navn på en formular i .mde'en"
Avatar billede pecl Nybegynder
28. februar 2003 - 11:25 #4
Den kan ikke finde formularen. Siger at den ikke eksisterer.
Er det bare navnet på formularen der skal skrives - eller er der flere parametre der skal med ?
28. februar 2003 - 11:33 #5
Argh....sorry :o(

Jeg har lavet det før, men havde glemt, at man er nødt til at have en public funktion/procedure i .mde'en som åbner formularen. Dernæst er det denne funktion/procedure, som man kalder hvorved formularen åbnes.

Beklager min dårlige hukommelse så tidligt på året.
Avatar billede pecl Nybegynder
28. februar 2003 - 12:07 #6
>tomasjepsen
Jeg får det ikke til at virke .
Hvad er kaldet til funktionen i den anden base. Jeg kan se den i objektoversigten i VBA
28. februar 2003 - 12:25 #7
Hvis du laver en public function i .mde'en:

Public Function ÅbnFormular(FNavn as String)
  docmd.openform FNavn
End function

Så kan du fra den anden database bare kalde den f.eks. således:
Call ÅbnFormular("MinFormular")
Avatar billede terry Ekspert
02. marts 2003 - 10:51 #8
Dim acc As Access.Application

    Set acc = CreateObject("Access.Application")
   
    acc.OpenCurrentDatabase "C:\test.mdb"
   
    acc.DoCmd.OpenForm "frmTest1"
   
    acc.Visible = True
Avatar billede pecl Nybegynder
03. marts 2003 - 11:16 #9
>Terry
Virker fint - men åbner ikke accessen maximeret. Kan man få den til det ?

Pecl :-)
Avatar billede terry Ekspert
03. marts 2003 - 20:02 #10
Take a look at this
************ Code Start *************
' This code was originally written by Dev Ashish.
' It is not to be altered or distributed,
' except as part of an application.
' You are free to use it in any application,
' provided the copyright notice is left unchanged.
'
' Code Courtesy of
' Dev Ashish
'
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 = 3
Private Const SW_NORMAL = 1

Function fOpenRemoteForm(strMDB As String, _
                                        strForm As String, _
                                        Optional intView As Variant) _
                                        As Boolean
Dim objAccess As Access.Application
Dim lngRet As Long

    On Error GoTo fOpenRemoteForm_Err

    If IsMissing(intView) Then intView = acViewNormal

    If Len(Dir(strMDB)) > 0 Then
        Set objAccess = New Access.Application
        With objAccess
            lngRet = apiSetForegroundWindow(.hWndAccessApp)
            lngRet = apiShowWindow(.hWndAccessApp, SW_NORMAL)
            'the first call to ShowWindow doesn't seem to do anything
            lngRet = apiShowWindow(.hWndAccessApp, SW_NORMAL)
            .OpenCurrentDatabase strMDB
            .DoCmd.OpenForm strForm, intView
            Do While Len(.CurrentDb.Name) > 0
                DoEvents
            Loop
        End With
    End If
fOpenRemoteForm_Exit:
    On Error Resume Next
    objAccess.Quit
    Set objAccess = Nothing
    Exit Function
fOpenRemoteForm_Err:
    fOpenRemoteForm = False
    Select Case Err.Number
        Case 7866:
            'mdb is already exclusively opened
            MsgBox "The database you specified " & vbCrLf & strMDB & _
                vbCrLf & "is currently open in exclusive mode.  " & vbCrLf _
                & vbCrLf & "Please reopen in shared mode and try again", _
                vbExclamation + vbOKOnly, "Could not open database."
        Case 2102:
            'form doesn't exist
            MsgBox "The Form '" & strForm & _
                        "' doesn't exist in the Database " _
                        & vbCrLf & strMDB, _
                        vbExclamation + vbOKOnly, "Form not found"
        Case 7952:
            'user closed mdb
            fOpenRemoteForm = True
        Case Else:
            MsgBox "Error#: " & Err.Number & vbCrLf & Err.Description, _
                    vbCritical + vbOKOnly, "Runtime error"
    End Select
    Resume fOpenRemoteForm_Exit
End Function
'************ Code End *************
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester