Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6] Uccidere il processo 'MSACCESS.EXE'

ho letto vecchi post e mi sono stati molto utili
in uno dei tanti mi diceva di creare uno script
con all'interno questo codice
 For Each obj In GetObject("winmgmts:").ExecQuery("SELECT * FROM
Win32_Process WHERE Name='MSACCESS.EXE'")
        obj.Terminate
 Next
e funziona benissimo infatti appena ci clicco due volte sopra access si
chiude
pero io vorrei che questo script fosse chiamato quando il mio report viene
chiuso
Per adesso ho inserito questo codice alla chiusura di un report
   Private Sub Report_Close()
     DoCmd.Restore
     DoCmd.Quit
  End Sub
ma il processo 'MSACCESS.EXE' rimane attivo
Come posso fare
grazie mille per eventuali suggeriementi

 wrote in message
news:R_g0e.17808$
kC3....@tornado.fastwebnet.it

Secondo me stai sbagliando approccio.
Se apri il Access via Automazione non mi pare il metodo corretto 
per terminare il processo.
Credo che ti rimanga attivo in quanto l'istanza dell'Oggetto 
creato con Get/CreateObject non viene terminato.
Invece di ricorrere a WMI dichiara la variabile Oggetto
in modo da intercettare gli eventi con WithEvents, a quel punto
Set accObj=Nothing
Forse mi sono perso qualche passaggio, ma è pur vero che non 
hai dato dettagli molto avanzati su come stai operando.
E' sicuro che quanto stai facendo è solo frutto di un'errato
metodo di utilizzo dell'Automazione.
Saluti.
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Allora mi spiego meglio io ho una procedura che mi stampa un determinato
report con all'interno vari sottoreport che devono essere visibili a seconda
di alcuni check che l'utente deve "checcare" il tutto mi funziona benissimo
l'unico problema che mi rimane il processo di access attivo
Vi illustro la mia procedura
Dim oACReport As Access.Report
        Dim ac As Access.Application
        Set ac = New Access.Application
        ac.OpenCurrentDatabase (nome_db)
        ac.DoCmd.OpenReport "nome_rpt",acViewPreview, , "[cod_schedao]=" &
Chr(34) & id & Chr(34)
        ac.DoCmd.Maximize
        ac.Application.Visible = True
        ac.DoCmd.SelectObject acReport, , True
        ac.DoCmd.RunCommand acCmdWindowHide
         If Check1(0).value = vbChecked Then
                    Reports!nome_rpt!nome_sottoreport1.Visible = True
         End If
         If Check1(1).value = vbChecked Then
                    Reports!nome_rpt!nome_sottoreport2.Visible = True
                    Reports!nome_rpt!nome_sottoreport3.Visible = True
         End If
        If Check1(2).value = vbChecked Then
                    Reports!nome_rpt!nome_sottoreport3.Visible = True
       End If
La prima volta mi funziona tutto bene la seconda volta invece mi da un
errore
    su questa riga Reports!nome_rpt!nome_sottoreport1.Visible = True
Errore run time 
2147417848
: Errore di automazione
L'oggetto invocato si è disconesso dai client corrispondenti
Inoltre ho notato che il processo di access  rimane attivo

 Inoltre ho notato che il processo di access  rimane attivo
E quando lo chiuderesti....???
Fai attenzione a questo:
Dim ac As Access.Application
Set ac = New Access.Application
Hai istanziato Access, ma il tuo codice non prevede 
la chiusura della stessa.
Il motivo per cui non l'hai fatto è che se lo fai ti chiude Access.
Questo è causato dall'aver dichiarato la variabile all'interno
della Sub, se la dichiaravi Private a livello di Modulo(di Form)
non avresti avuto il problema, ma devi sempre liberare
la risorsa....! 
Per questo ti ho suggerito di intercettare l'evento Quit/Close
dell'applicazione e in quell'Evento
Private WithEvents ac as Access.Application
    Set ac=Nothing
Altre considerazioni:
1)
[New Access.Application]
Ritengo non sia il metodo corretto, ti suggerisco di usare
i metodi GetObject o CreateObject, ma l'errore fondamentale
è che devi chiudere l'oggetto che hai istanziato da CODICE
altrimenti non si chiuderà mai Access.
2)
Esplicitando in quel modo sei costretto ad inserire i Riferimenti
alle Lib Ms Access.
Questa tecnica è rischiosa in quanto ti lega alla versione di
sviluppo.
Ti consiglio di valutare la tecnica dell'associazione tardiva
o LateBinding per ovviare agli eventuali problemi che potrebbe
darti uno sviluppo con Riferimenti non compatibili con le versioni
sulle quali girerà l'applicativo. 
In questo punto magari puoi avere suggerimenti migliori, io 
sviluppo quasi prettamente in Access(VBA) pertanto no mi porto
dietro questo problema, se non con le altre applicaziono Office
verso le quali uso sempre LateBinding.
Saluti
