Discussione:
chiudere un processo di access in windows già aperto
(troppo vecchio per rispondere)
Simba883
2004-10-14 19:21:35 UTC
Permalink
siccome a volte access non si chiude questo pezzo di codice sembra che
scorra i processi di windows alla ricerca di access e se aperto utilizza
quel processo anzichè aprirne un altro.

solo che a volte non mi funziona apre comunque piu processi senza terminrli
correttamente
qualcuno di voi saprebbe modificare questo codice per far terminare un
eventuale processo di access ancora aperto in windows prima di aprire
nuovamente access? Grazie.

--- CODE -------
Public Function winCheckMultipleInstances(Optional fConfirm As Boolean =
True) As Boolean
Dim fSwitch As Boolean, sMyCaption As String
Dim hWndApp As Long, hWndDb As Long
On Error GoTo ProcErr
sMyCaption = winGetTitle(winGetHWndDB())
hWndApp = apiGetWindow(apiGetDesktopWindow(), GW_CHILD)
Do Until hWndApp = 0
If hWndApp <> Application.hWndAccessApp Then
hWndDb = winGetHWndDB(hWndApp)
If hWndDb <> 0 Then
If sMyCaption = winGetTitle(hWndDb) Then Exit Do
End If
End If
hWndApp = apiGetWindow(hWndApp, GW_HWNDNEXT)
Loop
If hWndApp = 0 Then Exit Function
If fConfirm Then
If MsgBox(sMyCaption & " is already open@" _
& "Do you want to open a second instance of this database?@", _
vbYesNo Or vbQuestion Or vbDefaultButton2) = vbYes Then Exit Function
End If
apiSetActiveWindow hWndApp
If apiIsIconic(hWndApp) Then
apiShowWindowAsync hWndApp, SW_RESTORE
Else
apiShowWindowAsync hWndApp, SW_SHOW
End If
Application.Quit
ProcEnd:
Exit Function
ProcErr:
MsgBox Err.Description
Resume ProcEnd
End Function
Alessandro Baraldi
2004-10-15 07:38:50 UTC
Permalink
Post by Simba883
siccome a volte access non si chiude questo pezzo di codice sembra che
scorra i processi di windows alla ricerca di access e se aperto utilizza
quel processo anzichè aprirne un altro.
solo che a volte non mi funziona apre comunque piu processi senza terminrli
correttamente
qualcuno di voi saprebbe modificare questo codice per far terminare un
eventuale processo di access ancora aperto in windows prima di aprire
nuovamente access? Grazie.
Non sò cos'è quella sbrodolata di Codice.....!!

'Killare un processo
Private Sub Form_Load()
Dim obj As Object
For Each obj In GetObject("winmgmts:").ExecQuery("SELECT * FROM
Win32_Process WHERE Name='calc.exe'")
If obj.Name ="MSACCESS.EXE" Then obj.Terminate
Next
End Sub


Io userei uno SCRIPT.

Ciao
@ALex.
--
Posted via Mailgate.ORG Server - http://www.Mailgate.ORG
Simba883
2004-10-15 18:56:31 UTC
Permalink
Post by Alessandro Baraldi
Non sò cos'è quella sbrodolata di Codice.....!!
'Killare un processo
Private Sub Form_Load()
Dim obj As Object
For Each obj In GetObject("winmgmts:").ExecQuery("SELECT * FROM
Win32_Process WHERE Name='calc.exe'")
If obj.Name ="MSACCESS.EXE" Then obj.Terminate
Next
End Sub
Io userei uno SCRIPT.
Ciao
@ALex.
il codice funziona lo messo in apertura db però mi chiude tutto anche il
processo che sto aprendo, posso evitare di selezionare quello in corso fra i
processi e far chiudere solo gli altri msaccess.exe?

ho modificato calc.exe che credo fosse un esempio

se metto questo codice prima di uscire dal db il processo rimane aperto

Dim obj As Object
For Each obj In GetObject("winmgmts:").ExecQuery("SELECT * FROM
Win32_Process WHERE Name='MSACCESS.EXE'")
If obj.Name = "MSACCESS.EXE" Then obj.Terminate
Next

Grazie.
Simba883
2004-10-15 19:06:15 UTC
Permalink
Post by Alessandro Baraldi
Non sò cos'è quella sbrodolata di Codice.....!!
'Killare un processo
Private Sub Form_Load()
Dim obj As Object
For Each obj In GetObject("winmgmts:").ExecQuery("SELECT * FROM
Win32_Process WHERE Name='calc.exe'")
If obj.Name ="MSACCESS.EXE" Then obj.Terminate
Next
End Sub
Io userei uno SCRIPT.
Ciao
@ALex.
praticamente mi accade questo, se metto tale codice in apertura db mi chiude
anche il processo in questione
se eseguo il codice qui sopra su click di un pulsante mi chiude
correttamente tutti i processi compreso quello in questione ed infatti esce
dal db e torna a windows (però almeno li chiude tutti effettivamente) se
invece eseguo questo codice appena prima del quit acsaveall lui chiude tutto
effettivamente uscendo prima del quit ma non chiude nessun processo

tu capisci il motivo?

Grazie in anticipo
ALESSANDRO Baraldi
2004-10-15 19:21:09 UTC
Permalink
Post by Simba883
praticamente mi accade questo, se metto tale codice in apertura db mi chiude
anche il processo in questione
se eseguo il codice qui sopra su click di un pulsante mi chiude
correttamente tutti i processi compreso quello in questione ed infatti esce
dal db e torna a windows (però almeno li chiude tutti effettivamente) se
invece eseguo questo codice appena prima del quit acsaveall lui chiude tutto
effettivamente uscendo prima del quit ma non chiude nessun processo
tu capisci il motivo?
Grazie in anticipo
E' ovvio.

Premetto che secondo me hai qualche cosa da rivedere nel codice, in quanto
non è posibile che ti rimanga aperta una sessione di Access, vedi anche
i consigli che ti hanno dato nel Post precedente........!

Ti ho consigliato di usare uno SCRIPT apposta per evitare il problema.
Nello script esegui la Routine che ti ho indicato, quindi apri il tuo
Applicativo con la Shell.

Se devi usare un Collegamento sul DESKTOP usa quello allo SCRIPT.....!!

Ciao
--
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------
Simba883
2004-10-15 19:29:37 UTC
Permalink
Post by ALESSANDRO Baraldi
Ti ho consigliato di usare uno SCRIPT apposta per evitare il problema.
Nello script esegui la Routine che ti ho indicato, quindi apri il tuo
Applicativo con la Shell.
Se devi usare un Collegamento sul DESKTOP usa quello allo SCRIPT.....!!
Ciao
--
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
per script intendevi quello ok, scusa l'ignoranza comunque dovrei farei in
modo
far eseguire un file eseguibile che esegua i seguenti comandi

1. la tua routine per terminare i processi
2. apre access ma con questa riga di comando
"C:\Programmi\File comuni\Microsoft Shared\Access
Runtime\Office10\MSACCESS.EXE" /Runtime "C:\miodatabase.mde"

in visual basic come assegno ad un icona sul desktop tale comando? notare
che /Runtime non è fra gli apici
la routine che mi crea il collegamento sul desktop è questa GRAZIE:

--- CODE -----------

'this part adds a shortcut to the desktop
Public Sub CreateDesktopShortcut(ByVal sName As String, ByVal sPath As
String, Optional HotKey As String = "", Optional sIcon As String = "",
Optional sWorkingDirectory As String = "", Optional sSubFolder As String =
"", Optional iWinStyle As Integer = vbNormalFocus)

Dim WshShell As Object
Dim oShellLink As Object
Dim sLinkPath As String
Set WshShell = CreateObject("WScript.Shell")

sLinkPath = WshShell.SpecialFolders("Desktop")

On Error Resume Next
If sSubFolder <> "" Then
sLinkPath = sLinkPath & "\" & sSubFolder
If Dir(sLinkPath) = "" Then MkDir sLinkPath
End If

On Error GoTo 0
Set oShellLink = WshShell.CreateShortCut(sLinkPath & "\" & sName &
".lnk")
oShellLink.WindowStyle = iWinStyle
oShellLink.HotKey = sHotKey
oShellLink.TargetPath = sPath
oShellLink.IconLocation = sIcon
oShellLink.Description = sName
oShellLink.WorkingDirectory = sWorkingDirectory
oShellLink.Save
Set oShellLink = Nothing
Set WshShell = Nothing

End Sub
ALESSANDRO Baraldi
2004-10-15 21:03:21 UTC
Permalink
Perchè ti complichi la vita.....??

Non devi far eseguire un EXE, devi far eseguire un file.vbs

Nel file .VBS(o script) inserisci il Codice che ti ho passato
opportunamente formattato per i File Script in VBS che
KILLA Access nel caso sia Attivo, poi Esegue il tuo Applicativo:

Esempio :
1)Copia questo codice in un File di Testo, quindi rinomina l'Estensione in
VBS

For Each obj In GetObject("winmgmts:").ExecQuery("SELECT * FROM
Win32_Process WHERE Name='MSACCESS.EXE'")
obj.Terminate
Next

2)Apri Access
3)Fai DOPPIO CLICK sul file.VBS

Come per magia ACCESS si è chiuso.

Ora inserisci all'interno del File.VBS la chiamata alla shell per aprire
l'applicativo.

Quando lo SCRIPT è finito lancialo......!

Ciao
--
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------
Simba883
2004-10-15 21:54:01 UTC
Permalink
Post by ALESSANDRO Baraldi
Ora inserisci all'interno del File.VBS la chiamata alla shell per aprire
l'applicativo.
Quando lo SCRIPT è finito lancialo......!
Ciao
--
@Alex (Alessandro Baraldi)
ok grazie mille.
Simone Calligaris
2004-10-15 21:02:54 UTC
Permalink
"Simba883"
Post by Simba883
siccome a volte access non si chiude questo pezzo di codice sembra che
scorra i processi di windows alla ricerca di access e se aperto utilizza
quel processo anzichè aprirne un altro.
Facci capire come riprodurre il problema (magari con northwind.mdb).
In alternativa mandami in e-mail un tuo .mdb Demo afflitto da questa
anomalia.

A me queste cose non succedono, però mi hai incuriosito.

Saluti.
Simba883
2004-10-15 21:35:08 UTC
Permalink
Post by Simone Calligaris
A me queste cose non succedono, però mi hai incuriosito.
Saluti.
questo è un bug famoso per access a me succede ma non in tutti i miei db
in questo si ma non ho fatto nulla di papparentemente diverso dagli altri.

booo!
Simone Calligaris
2004-10-16 08:12:54 UTC
Permalink
"Simba883" <
Post by Simba883
questo è un bug famoso per access a me succede ma non in tutti i miei db
in questo si ma non ho fatto nulla di papparentemente diverso dagli altri.
E' un bug famoso, ma altrettanto famose sono le buone norme per prevenirlo!
;-)

Forse per questo non c'ho mai sbattuto il muso contro.
Ti capita anche dopo aver creato l'MDE?

Saluti.
Simba883
2004-10-16 10:26:22 UTC
Permalink
Post by Simone Calligaris
E' un bug famoso, ma altrettanto famose sono le buone norme per prevenirlo!
;-)
Forse per questo non c'ho mai sbattuto il muso contro.
Ti capita anche dopo aver creato l'MDE?
Saluti.
Si mi capita, il mio db è abbastanza vasto sono sincero ma di recorset
aperti
non so dove andare a trovarlo
Simba883
2004-10-16 10:27:16 UTC
Permalink
Post by Simone Calligaris
E' un bug famoso, ma altrettanto famose sono le buone norme per prevenirlo!
;-)
Forse per questo non c'ho mai sbattuto il muso contro.
Ti capita anche dopo aver creato l'MDE?
Saluti.
a chi fosse interessato gli mando una piccola parte del mio db che comunque
presenta il problema lo stesso
se siete interessati fatemelo sapere.
Simone Calligaris
2004-10-16 10:46:30 UTC
Permalink
"Simba883" <
Post by Simba883
a chi fosse interessato gli mando una piccola parte del mio db che comunque
presenta il problema lo stesso
se siete interessati fatemelo sapere.
Perfetto: sono interessato.

Saluti.

Loading...