sql >> Databasteknik >  >> RDS >> Access

HUR MAN:Kör schemalagda uppgifter med Microsoft Access

Har du någonsin velat köra en åtkomstkod på ett automatiskt schema?

Jag ska visa dig hur du använder ett befintligt Access-program för att köra och avsluta på ett elegant sätt när det startas via Task Scheduler samtidigt som det presenterar ett vänligt användargränssnitt när det startas av en slutanvändare.

Nyckeln till att få det att fungera är /cmd flagga.

Att skicka kommandoradsarg för åtkomst

För att skicka ett kommandoradsargument för att komma åt använder du /cmd kommandoradsargument när du startar din applikation:

Anger att det som följer på kommandoraden är värdet som kommer att returneras av Kommandot fungera. Det här alternativet måste vara den sista omkopplaren på kommandoraden. Du kan använda semikolon (;) som ett alternativ till /cmd .

Använd den här omkopplaren för att ange ett kommandoradsargument som kan användas i Visual Basic for Applications (VBA)-kod

För att hämta texten skickar du på kommandoraden efter /cmd argument använder du VBA.Command fungera.

Du kan använda den här funktionen vid start för att omdirigera din kod till att utföra vad den återkommande uppgiften än är.

Praktiskt exempel

  1. Skapa en ny databas
  2. Lägg till följande kod i en ny standardmodul:
Public Function Startup()
    
    If Trim(VBA.Command) = "Nightly" Then
        Shell "winver", vbNormalFocus
        Application.Quit
    End If
    MsgBox "Start up"
   
End Function
  1. Skapa ett nytt makro
  2. Välj "RunCode " från rullgardinsmenyn "Lägg till ny åtgärd"
  3. Ställ in "Funktionsnamn" till Startup()
  4. Stäng och spara makrot som "AutoExec "

Kör som en normal användare

För att testa programmet som en normal användare, komprimera och reparera databasen.

Du kommer att se en meddelanderuta som säger "Starta upp."

Kör som en schemalagd uppgift

För att efterlikna körning som en schemalagd uppgift, stäng din databas och starta den med följande kommando:

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

Access blinkar kort på skärmen, sedan kommer du att se dialogrutan "Om Windows", och Access stänger sig själv.

Några anteckningar

  • AutoExec är ett speciellt makro som körs automatiskt vid start
  • Även om Startup() rutinen returnerar inget värde, vi deklarerar det som en Function eftersom vi inte direkt kan anropa en Sub från ett makro i Access
  • Vid normal användning hoppas cmd-fönsterkoden över
  • Jag anropar uttryckligen Application.Quit inuti mitt "Nattliga"-block för att undvika att åtkomst hänger på kod som kräver användarinteraktion (som MsgBox-koden i mitt exempel)
  • Jag anropar alltid Trim() runt VBA.Command funktion för att undvika buggar som introduceras av inledande eller efterföljande blanksteg på kommandoraden
  • Som ett alternativ till /cmd , kan du också använda /x växla och ge det namnet på ett anpassat makro (Jag gör inte det eftersom jag hatar makron med passionen för tusen vita varma solar; de enda två makron jag någonsin använder är Autoexec och Autokeys eftersom de ger speciell funktionalitet )

En sista anteckning om uppgiftsschemaläggaren och automatisering av andra kontorsprogram

Om din uppgift inte verkar fungera när du ställer in den så att den körs över natten, prova att ändra alternativet för schemalagd uppgift till "Kör endast när användaren är inloggad."

Office-applikationer är inte avsedda att köras i det som Windows kallar "icke-interaktivt" läge. Om du ställer in en schemalagd uppgift till "Kör oavsett om användaren är inloggad eller inte", kommer den uppgiften att köras i icke-interaktivt läge. Detta kan orsaka en mängd olika problem, särskilt om du automatiserar Excel som en del av den återkommande processen.

Den enklaste lösningen är att låsa arbetsstationen istället för att logga ut och låta alternativet vara inställt på "Kör endast när användaren är inloggad."

Det kanske inte är praktiskt i din situation, men det är en viktig faktor att vara medveten om. Anse dig själv varnad:

Microsoft rekommenderar för närvarande inte, och stöder inte, automatisering av Microsoft Office-program från någon obevakad, icke-interaktiv klientapplikation eller komponent


  1. Vad händer med dubbletter när du infogar flera rader?

  2. Använd SCOPE_IDENTITY() för att returnera det senast infogade identitetsvärdet i samma omfattning (SQL-server)

  3. Hur man ändrar standarddatabaspostprofilen för en användare i SQL Server (T-SQL)

  4. Välj Data via en tabellvärderad funktion i SQL Server