Avatar billede taio Novice
17. november 2003 - 22:23 Der er 15 kommentarer og
1 løsning

Lukning af windows i database

Hey alle kloge

Hvordan lukker man windows og access fra access??

Det jeg skal bruge er at kunne lukke windows når jeg afslutter min access database.

Hvem kan hjælpe???

på forhånd tak

Taio
17. november 2003 - 22:29 #1
Smid dette i et modul:
Private Declare Function apiExitWindowsEx Lib "user32" _
        Alias "ExitWindowsEx" _
        (ByVal uFlags As Long, ByVal dwReserved As Long) _
        As Long

Public Const EWX_FORCE = 4      'Forcibly terminates processes
                                'that do not respond.
Public Const EWX_LOGOFF = 0    'Terminates processes, then logs off.
Public Const EWX_SHUTDOWN = 1  'Powers the system off, if possible.
Public Const EWX_REBOOT = 2    'Reboots the system.


Herefter lukkes windows med denne kode:
Call apiExitWindowsEx(lngExitVal, 0)
17. november 2003 - 22:29 #2
Eller:
Call apiExitWindowsEx(lngExitVal, EWX_SHUTDOWN)
Avatar billede taio Novice
17. november 2003 - 22:39 #3
Jeg får en fejl når jeg prøver at kalde Call apiExitWindowsEx(lngExitVal, 0)

Kan det være fordi jeg bruger access97 ??
17. november 2003 - 22:41 #4
Prøv en af de andre værdier i stedet for nul (1, 2 eller 4)

Det er windows-versionen, som måske kan drille...
Avatar billede taio Novice
17. november 2003 - 22:42 #5
Når jeg prøver at kompiler kommer fejlen ved "lngExitVal"
17. november 2003 - 22:48 #6
Sorry, det var mig, som huskede forkert, hvordan man brugte funktionen.

Du skal alt dette i modulet:
Private Declare Function apiExitWindowsEx Lib "user32" _
        Alias "ExitWindowsEx" _
        (ByVal uFlags As Long, ByVal dwReserved As Long) _
        As Long

Public Const EWX_FORCE = 4      'Forcibly terminates processes
                                'that do not respond.
Public Const EWX_LOGOFF = 0    'Terminates processes, then logs off.
Public Const EWX_SHUTDOWN = 1  'Powers the system off, if possible.
Public Const EWX_REBOOT = 2    'Reboots the system.

Function fTerminateWin(lngExitVal As Long)
    fTerminateWin = apiExitWindowsEx(lngExitVal, 0)
End Function


Herefter kalder du den således:
call fTerminateWin(EWX_SHUTDOWN)

eller
call fTerminateWin(EWX_FORCE)
Avatar billede taio Novice
17. november 2003 - 22:51 #7
ingen fejle, men den lukker heller ikke :-(
17. november 2003 - 22:56 #8
Man kan ikke få det hele ;o)


Det er her, du kan prøve alle de forskellige værdier:
I debug-vinduet (Ctrl+G) kan afprøve hver af følgende:
call fTerminateWin(0)
call fTerminateWin(1)
call fTerminateWin(2)
call fTerminateWin(3)
call fTerminateWin(4)

(egentlig kan du også prøve flere, men de er bare ikke dokumenteret....)
Hvis ingen af disse virker, kan jeg ikke hjælpe dig. Den plejer at virke, men gør det muligvis ikke på de nyere operativsystemer.
Jeg vil helst ikke selv teste på min egen maskine lige nu, da jeg har noget download kørende i baggrunden. Men jeg skal forsøge, når jeg lukker ned senere. Så vil jeg vende tilbage, hvis du ikke selv har haft held med det.
Avatar billede taio Novice
17. november 2003 - 23:28 #9
Jeg har fået det til at virke delvis. Når den lukker windows, når den ikke at afslutte access databasen......kan det lade sig gøre?? og hvordan??
17. november 2003 - 23:30 #10
du kan skrive dette lige inden call fTerminateWin(0):

docmd.Quit acQuitSaveAll
Avatar billede taio Novice
17. november 2003 - 23:31 #11
så kan den ikke køre call fTerminateWin(0):
Avatar billede taio Novice
17. november 2003 - 23:32 #12
Jeg kører den fra en formular, er det muligt at køre den ved afslutnig af access eller sådan noget??
17. november 2003 - 23:40 #13
Du kan ikke umiddelbart 'fange' når en bruger lukker Access, hvis de f.eks. klikker på krydset i øverste højre hjørne.

Jeg plejer at sørge for altid at have én bestemt formular åben; det kan være en hovedmenu, en oversigt eller blot en lille skjult formular.
På denne formular kan man lægge noget kode på Form_Unload, som så kalder fTerminateWin.

På Form_Unload kan du tillige spørge brugeren om han er sikker:

If msgbox("Dette vil lukke Access og afslutte Windows!" & vbnewline & vbnewline & "Er du sikker?", vbquestion+vbokcancel, "Luk Access og Windows?") = vbCancel then
  docmd.Cancelevent
else
  call fTerminateWin(0)
endif

(koden er skrevet frit i hånden, så der kan godt være en enkelt tastefejl eller 2 ;o)
17. november 2003 - 23:41 #14
If msgbox("Dette vil lukke Access og afslutte Windows!" & vbnewline & vbnewline & "Er du sikker?", vbquestion+vbokcancel, "Luk Access og Windows?") = vbCancel then
  docmd.Cancelevent
else
  docmd.Quit acQuitSaveAll
  call fTerminateWin(0)
endif

Manglede lige en linie!
17. november 2003 - 23:42 #15
...lukker nu...godnat :o)
Avatar billede taio Novice
17. november 2003 - 23:51 #16
Mange tak for hjælpen...selv godnat

Jeg kan ikke få den til at virke på formular. Kan ikke køre koden når formularen er lukket.
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