Apertura db secondario con focus

di il
3 risposte

Apertura db secondario con focus

Buongiorno egregi, spiego meglio cosa vorrei realizzare.
Ho un db principale diviso in BE-FE ed a questo db ho collegato, su necessità un database secondario.
Questo database secondario importa, all'apertura, alcune tabelle presenti nel BE per poter essere operativo ed implementare parte dei dati.

Vorrei, a tal proposito, aprire il database secondario come se facesse parte del principale inserendo, all'apertura, questo codice:
Option Compare Database
Option Explicit

Const SW_HIDE = 0
'in A00 devi aggiungere:
Const SW_NORMAL = 1

Private Declare Function ShowWindow Lib "user32" _
    (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
    
Private Sub Form_Open(Cancel As Integer)
Dim hWindow As Long
Dim nResult As Long
Dim nCmdShow As Long
hWindow = Application.hWndAccessApp
nCmdShow = SW_HIDE
nResult = ShowWindow(ByVal hWindow, ByVal nCmdShow)
'in A00 devi aggiungere:
Call ShowWindow(Me.hwnd, SW_NORMAL)

DoCmd.MoveSize 100, 100
End Sub
tutto bene se non fosse che, quando si apre il db secondario, la schermata di quest'ultimo non si sovrappone a quella attuale ma bensì, si apre ridotta ad icona....cosa manca per poter dare il massimo focus al database secondario su apertura?
La richiesta è strana lo so, ma integrare il db secondario al principale mi ruberebbe tantissimo tempo e considerando che il principale ha moltissimo codice ed è completamente compilato, non vorrei perderci settimane

3 Risposte

  • Re: Apertura db secondario con focus

    Signori scusatemi, non vi sono suggerimenti o consigli in merito?
    Mi affido alla vostra esperienza
  • Re: Apertura db secondario con focus

    Premetto che queste idee di nascondere la MDI di Access le trovo...

    Access da qualche versione apre il secondo applicativo appoggiandosi all'istanza del primo già aperto... quindi il sistema non funziona.
    Devi prima lanciare un Nuovo Server di Automazione Access.Exe, puoi usare l'esempio sotto, su quello aprire l'applicativo... recuperi l'handle con le API e lo passi al tuo codice...

    Questo dovrebbe fare la prima parte, ovvero lanciare il Server ed associarlo al Client.
    
    Public Sub ExecuteFile(FilePath As String)
        'Esegue file
        On Error GoTo error
        Dim ret As Integer
        ret = Shell("rundll32.exe url.dll,FileProtocolHandler " & (FilePath))
        Exit Sub
    error:
        MsgBox Err.Description, vbExclamation, "Error"
    End Sub
    Ora devi recuperare l'Handle, puoi usare FindWindow ma... devi usare la CAPTION del File MDB o ACCDB perchè altrimenti ne trovi 2, quello già aperto e quello appena aperto...
    Potresti usare il [ret] della Shell se non ricordo male che, ma magari sbaglio con ShellExecute, dovrebbe restituire il PID da cui puoi ricavare l'Hanlde...

    Questo mi da ragione:
    http://www.vb-helper.com/howto_shell_get_hwnd.htm

    Leggi anche questo:
    https://www.everythingaccess.com/tutorials.asp?ID=Bring-an-external-application-window-to-the-foreground

    Insomma...non è cosa di 2 righette, se pensi di essere in grado ne vale la pena... altrimenti lascia Access Visibile e fai bene le cose di cui hai padronanza solida.
  • Re: Apertura db secondario con focus

    Alex grazie mille per la risposta. In questi giorni ho cercato di metterci mano ma è davvero troppo complicato per me...

    Provo a fare come mi suggerisci od inglobare il tutto nel db padre.
    Ancora grazie mille
Devi accedere o registrarti per scrivere nel forum
3 risposte