Newsgroup: it.comp.appl.access
Titolo: GetObject ma quale istanza di Access mi dà?

Come faccio ad ottenere una specifica istanza di Access con GetObject
se l'utente ha già aperto un altro database?
grazie, Lauro

 grazie, Lauro
Prova così:
'---------
On Error GoTo getobj_err
Dim MyObject1 As Object, MyObject2 As Object
Set MyObject1 = GetObject("C:\Documenti\db1.mdb")
Set MyObject2 = GetObject("C:\Documenti\db2.mdb")
MyObject1.DoCmd.OpenForm "nomeForm"
Set MyObject1 = Nothing
Set MyObject2 = Nothing
Exit Sub
getobj_err:
Set MyObject1 = Nothing
Set MyObject2 = Nothing
MsgBox Err.Number & ", " & Application.AccessError(Err.Number)
'--------
Ciao.
-- 
Sergio MAZZA 

Grazie per la risposta, ma non capisco bene il tuo suggerimento anche
se forse mi è utile lo stesso.
Quello di cui voglio essere sicuro è di aprire e avere un riferimento
al MioDataBase se non è aperto oppure di avere un riferimento ad esso
se è già aperto. Senza sapere se quante altre istanze di Access siano
già aperte.
Io facevo in questo modo (avendo una variabile globale oAppAcc del
tipo Access.Application):
Private Function RitornaDBAccess() As Access.Application
Dim oAA As  Access.Application
   Set oAA = GetObject("NomeMioDatabase.mdb", "Access.Application")
   oAA.visible = true
   Set RitornaDBAccess = oAA
 
End Function
oAppAcc=RitornaDBAccess
oAppAcc.FaiQuelloCheVuoi
Che mi ridava sempre un riferimento alla mia istanza di Access (in
realtà ne apriva un'altra e poi 'miracolosamente' la univa alla
precedente al passaggio di oAA.Visible=true)
Se però impostavo una maschera da aprire di default in Avvio e quindi
inserivo:
   oAA.DoCmd.Close acForm, "Benvenuto"  
per sbarazzarmene mi dava sempre l'errore 2455 su  oAA.Visible=true
Se tolgo  oAA.Visible=true mi da sempre una nuova istanza (e così via
all'infinito) del MioDataBase
Mi sembra però che usando il Late Binding (l'oggetto generico come tu
fai) le cose migliorano.
Mi sembra che con questo tutto sembra OK
Private Function RitornaDBAccess() As Access.Application
Dim oAA As  Object
   Set oAA = GetObject("NomeMioDatabase.mdb")
   oAA.DoCmd.Close acForm, "Benvenuto"  
   Set RitornaDBAccess = oAA
 
End Function
oAppAcc=RitornaDBAccess
oAppAcc.FaiQuelloCheVuoi
Ci vedi qualche problema?
Mi sai spiegare la differenza?
Ciao e grazie, Lauro


 ha scritto nel messaggio news:dfmse1tr8hq9l91qo...@4ax.com...

La prima cosa da fare è quella di rispettare le (poche) regole di questo NG, scrivendo in coda al testo del messaggio precedente; 
come sto facendo io, grazie.
La seconda (ma più importante) differenza è quella che non gestisci gli errori di qualsiasi tipo, che se se ne presenta uno, lasci 
la memoria occupata dagli oggetti creati (Set xx = ).
Se vuoi che ti venga restituita una sessione devi utilizzare variabili globali, ma te ne sconsiglio l'utilizzo a meno di creare una 
perfetta gestione degli errori per distruggere la variabile globale e all'uscita della form o applicazione.
Questo è un esempio:
'---> questo un un modulo generale
Public objSessionePerGetObject As Object
Function utilizzoGetObject() As Boolean
Set objSessionePerGetObject = GetObject("C:\Documenti\db1.mdb")
If Err.Number <> 0 Then
    Set objSessionePerGetObject = CreateObject("Access.Application")
    objSessionePerGetObject.OpenDatabase "C:\Documenti\db1.mdb", False '<-- aperto in modalita NON esclusiva
End If
On Error GoTo gestErrori
utilizzoGetObject = True
Exit Function
gestErrori:
    utilizzoGetObject = False
End Function
'<--- 
'--> richiami la funzione così
If utilizzoGetObject = True Then
    objSessionePerGetObject.Visible = True
    objSessionePerGetObject.DoCmd.OpenForm "nomeForm"
Else
    MsgBox "Sessione non attivata!"
End If
'<--
Devi impostare all'uscita dalla form/applicazione la distruzione della variabile globale:
Set objSessionePerGetObject = Nothing
Altrimenti ti rimarrà attiva fino a che access non sarà riavviato...
Ciao.
-- 
Sergio MAZZA