sql >> Database >  >> RDS >> Access

HOE:Geplande taken uitvoeren met Microsoft Access

Heb je ooit een toegangscode volgens een automatisch schema willen uitvoeren?

Ik laat je zien hoe je een bestaande Access-toepassing kunt gebruiken om gracieus uit te voeren en af ​​te sluiten wanneer deze wordt gestart via Taakplanner, terwijl je nog steeds een gebruiksvriendelijke gebruikersinterface presenteert wanneer deze door een eindgebruiker wordt gestart.

De sleutel om het te laten werken is de /cmd vlag.

Opdrachtregelargs doorgeven voor toegang

Om een ​​opdrachtregelargument door te geven om toegang te krijgen, gebruik je de /cmd opdrachtregelargument bij het starten van uw toepassing:

Geeft aan dat wat volgt op de opdrachtregel de waarde is die wordt geretourneerd door de Opdracht functie. Deze optie moet de laatste schakelaar op de opdrachtregel zijn. U kunt een puntkomma (;) gebruiken als alternatief voor /cmd .

Gebruik deze schakeloptie om een ​​opdrachtregelargument op te geven dat kan worden gebruikt in Visual Basic for Applications (VBA)-code

Om de tekst op te halen, geeft u deze door op de opdrachtregel na de /cmd argument, gebruik je de VBA.Command functie.

U kunt deze functie bij het opstarten gebruiken om uw code om te leiden om de terugkerende taak uit te voeren.

Praktisch voorbeeld

  1. Maak een nieuwe database
  2. Voeg de volgende code toe aan een nieuwe standaardmodule:
Public Function Startup()
    
    If Trim(VBA.Command) = "Nightly" Then
        Shell "winver", vbNormalFocus
        Application.Quit
    End If
    MsgBox "Start up"
   
End Function
  1. Maak een nieuwe macro
  2. Kies "RunCode " uit de vervolgkeuzelijst "Nieuwe actie toevoegen"
  3. Stel "Functienaam" in op Startup()
  4. Sluit en sla de macro op als "AutoExec "

Uitvoeren als een normale gebruiker

Om de applicatie als een normale gebruiker te testen, comprimeert en repareert u eenvoudig de database.

U ziet een berichtvenster met de tekst 'Opstarten'.

Uitvoeren als een geplande taak

Om het uitvoeren van een geplande taak na te bootsen, sluit u uw database en start u deze met het volgende commando:

"C:\Path\To\msaccess.exe" "C:\Path\To\MyDb.accdb" /cmd Nightly

Access knippert kort op het scherm, daarna ziet u het dialoogvenster "Over Windows" en sluit Access zichzelf af.

Enkele opmerkingen

  • AutoExec is een speciale macro die automatisch wordt uitgevoerd bij het opstarten
  • Hoewel de Startup() routine retourneert geen waarde, we declareren het als een Function omdat we een Sub . niet rechtstreeks kunnen bellen van een macro in Access
  • Bij normaal gebruik wordt de cmd-venstercode overgeslagen
  • Ik bel expliciet Application.Quit in mijn "Nightly" -blok om te voorkomen dat Access vastloopt op code die gebruikersinteractie vereist (zoals de MsgBox-code in mijn voorbeeld)
  • Ik bel altijd Trim() rond de VBA.Command functie om bugs te voorkomen die worden geïntroduceerd door voorloop- of volgspaties op de opdrachtregel
  • Als alternatief voor /cmd , kunt u ook de /x . gebruiken switch en geef het de naam van een aangepaste macro door (Ik doe dat niet omdat ik macro's haat met de passie van duizend witte hete zonnen; de enige twee macro's die ik ooit gebruik zijn Autoexec en Autokeys omdat ze speciale functionaliteit bieden )

Een laatste opmerking over de taakplanner en het automatiseren van andere kantoortoepassingen

Als uw taak niet lijkt te werken wanneer u deze instelt om 's nachts te worden uitgevoerd, probeer dan de geplande taakoptie om te schakelen naar "Alleen uitvoeren wanneer gebruiker is aangemeld".

Office-toepassingen zijn niet bedoeld om te draaien in wat Windows de "niet-interactieve" modus noemt. Als u een geplande taak instelt op "Uitvoeren of de gebruiker is aangemeld of niet", wordt die taak in niet-interactieve modus uitgevoerd. Dit kan verschillende problemen veroorzaken, vooral als u Excel automatiseert als onderdeel van het terugkerende proces.

De eenvoudigste oplossing is om het werkstation te vergrendelen in plaats van uit te loggen en de optie op "Alleen uitvoeren wanneer gebruiker is aangemeld" te laten staan.

Dat is misschien niet praktisch in uw situatie, maar het is een belangrijke overweging om op te letten. Beschouw jezelf als gewaarschuwd:

Microsoft beveelt momenteel geen automatisering van Microsoft Office-applicaties aan en ondersteunt deze niet vanuit een onbeheerde, niet-interactieve clientapplicatie of component


  1. een opgeslagen proces aanroepen via een dblink

  2. T-SQL voorwaardelijke bestelling op

  3. Hoe werk ik automatisch een tijdstempel bij in PostgreSQL

  4. InMemory DUPLICATE Verwarring in Oracle RAC