Avatar billede micaud Mester
29. september 2006 - 19:39 Der er 17 kommentarer og
1 løsning

Mail fra Access eller rapport fra fil/tabel

Jeg arbejder med nogle store databaser, hvor jeg køre en masse kørsler om natten via makroer fra Access.

Der kører 5 forespørgsler i én makro.

Jeg vil egentlig gerne have en mail, når nogle af forespørgsler er i makroen er kørt, men docmd.sendobject virker ikke, da den ikke kan åbne postsessionen, måske fordi databaserne køre på mailserveren.

Alternativt vil jeg gerne have, at jeg kan indlægge tiden det har taget for de forskellige forespørgsler ned i en tabel. Tabellen skal altså gerne vise dato, tidsforbruget pr. forespørgsel og et "OK".

Tabellen skal være fortløbende, så der skal altså ikke slettes fra tabellen.

Håber I kan hjælpe.
Avatar billede kabbak Professor
29. september 2006 - 20:27 #1
Jeg kan ikke se hvad du skal bruge OK til, her er et forslag

Lav en tabel kald den f.eks. tblRunningLog

Felter:
Starttid
Sluttid
Tidsforbrug
QueryName

Overst i makroen
Dim StartTid as date
Dim StartTid As Date, ForbrugtTid As Date

Lige før den første forespørgsel køres

StartTid = Now()

din kode for forespørgslen

DoCmd.SetWarnings False
ForbrugtTid = Now() - StartTid
DoCmd.RunSQL ("INSERT INTO tblRunningLog ( StartTid, SlutTid, Tidsforbrug, QueryName )SELECT #" & StartTid & "#,#" & Now() & "#,#" & ForbrugtTid & "#, 'Din_forespørgsels_navn'")
DoCmd.SetWarnings True

Gør det samme for hver forespørgsel du kører
Avatar billede micaud Mester
29. september 2006 - 20:35 #2
Nu er jeg ikke den store hej til VB i access (kun excel), så hvordan skal koden lyde, hvis min forespørgsel eksempelvis hedder qFinansposter?

Altså jeg vil gerne have hjælp til "din kode for forespørgslen" som du skriver...
Avatar billede kabbak Professor
29. september 2006 - 20:49 #3
DoCmd.RunSQL ("INSERT INTO tblRunningLog ( StartTid, SlutTid, Tidsforbrug, QueryName )SELECT #" & StartTid & "#,#" & Now() & "#,#" & ForbrugtTid & "#, 'qFinansposter'")
Avatar billede micaud Mester
29. september 2006 - 20:50 #4
Okay tror jeg har styr på det, men hvordan kører jeg mit modul. Jeg har tidligere brug makroer og lagt en genvej over i schedule task, men gør jeg det med en modul, så åbner den blot modulet i edit-mode, men kører den ikke. Jeg kan heller ikke afspille fra access, fordi "afspil-knappen" ikke er aktiv??
Avatar billede kabbak Professor
29. september 2006 - 20:51 #5
Kopier din makro her ind, så skal jeg sætte det på

Lav en tabel kald den f.eks. tblRunningLog

Felter:
Starttid    DatoKlokkeslet
Sluttid    DatoKlokkeslet
Tidsforbrug Klokkeslet
QueryName  Tekst
Avatar billede kabbak Professor
29. september 2006 - 20:57 #6
Jeg plejer at smide al kode i en function, og nor den skal afspilles kan du gøre det via makro i Access
Avatar billede micaud Mester
29. september 2006 - 20:58 #7
Vi skal lige være enige om termerne. Der er jo både makroer og module i Access "hovedmenu". Jeg har før brug makroer, fordi jeg ikke er så skarp i kodning i moduler. Det vi laver nu er i moduler, og jeg har kun behov for at vide, hvordan jeg kører modulet. I makroer klikker man bare på makronavnet og så kører den, men í moduler åbnes modulet kun hvis man klikker på det, det kører altså ikke.

Mit module ser sådan ud og det virker fint:

Sub mv()

Dim StartTid As Date
Dim SlutTid As Date, ForbrugtTid As Date

'Lige før den første forespørgsel køres

StartTid = Now()

    DoCmd.OpenQuery "qBudget-test", acViewNormal, acEdit

DoCmd.SetWarnings False
ForbrugtTid = Now() - StartTid
DoCmd.RunSQL ("INSERT INTO tLog ( StartTid, SlutTid, Tidsforbrug, QueryName )SELECT #" & StartTid & "#,#" & Now() & "#,#" & ForbrugtTid & "#, 'Test'")
DoCmd.SetWarnings True

End Sub

Men igen, hvordan kører jeg det ??? (sikkert ganske banalt)
Avatar billede micaud Mester
29. september 2006 - 21:00 #8
Gider du lige lave mit module som funktion, og så fortælle mig hvilke kommandoer jeg skal bruge i makroen?
Avatar billede kabbak Professor
29. september 2006 - 21:07 #9
Her er koden sæt den ind i et modul
Public Function mw()
    Dim StartTid As Date
    Dim ForbrugtTid As Date

    'Lige før den første forespørgsel køres

    StartTid = Now()

    DoCmd.OpenQuery "qBudget-test", acViewNormal, acEdit

    DoCmd.SetWarnings False
    ForbrugtTid = Now() - StartTid
    DoCmd.RunSQL ("INSERT INTO tLog ( StartTid, SlutTid, Tidsforbrug, QueryName )SELECT #" & StartTid & "#,#" & Now() & "#,#" & ForbrugtTid & "#, 'Test'")
    DoCmd.SetWarnings True

End Function

gem og luk modulet

Klik på fanen med makroer
vælg ny

Vælg Afspil Kode

Vælg ikke de inbyggede, men din database, så kan du se den der.
dobbeltklik på navnet, så det hopper op i vinduet.
klik ok
gem din makro

nu kører koden når du klikker på makroen
Avatar billede micaud Mester
29. september 2006 - 21:13 #10
Fantastisk, man bliver jo krævende, hvis nu jeg gerne vil have en kolonne mere i min tabel kaldet "Nr". I den kolonne vil jeg gerne have, at den tæller op hver gang jeg kører funktionen. Altså skal der ud for de 5 forespørgsler, som der køres i funktionen første gang stå 1 og næste gang 2 osv.... Kan du fixe den, så er det jo mere end perfekt.... Smid også endelig et svar, for du har jo tjent dine 100 point, men det kunne være sjovt, at få det sidste med...
Avatar billede micaud Mester
29. september 2006 - 21:14 #11
Jeg glemte lige en ting, jeg vil gerne have tabellen sorteret faldende, således den sidste kørsel står øverst, hvordan gør jeg det?
Avatar billede kabbak Professor
29. september 2006 - 21:36 #12
Nr skal være af typen Langt heltal

Åben din tabel tLog og sig at den skal sortere startid faldende, gem ændringer, så skulle nyeste være øverst når du åbner den


Public Function mw()
    Dim StartTid As Date, ForbrugtTid As Date, NR As Variant

    'Lige før den første forespørgsel køres

    StartTid = Now()

    DoCmd.OpenQuery "qBudget-test", acViewNormal, acEdit

    NR = DMax("[NR]", "tLog", "[QueryName] = 'Test'") + 1
    If IsNull(NR) Then NR = 1
    DoCmd.SetWarnings False
    ForbrugtTid = Now() - StartTid
    DoCmd.RunSQL ("INSERT INTO tLog ( StartTid, SlutTid, Tidsforbrug, QueryName ,Nr)SELECT #" & StartTid & "#,#" & Now() & "#,#" & ForbrugtTid & "#, 'Test'" & NR)
    DoCmd.SetWarnings True

End Function
Avatar billede kabbak Professor
29. september 2006 - 21:38 #13
Et svar ;-))
Avatar billede micaud Mester
29. september 2006 - 21:46 #14
Den melder syntaxfejl, fordi der mangler en operator i forespørgselsudtrykket "Test'1"

Bliver de fejlagtig slået sammen eller hvorfor ??
Avatar billede kabbak Professor
29. september 2006 - 21:48 #15
Husk når det er tekst skal der en ' på hver side ' af teksten
Avatar billede kabbak Professor
29. september 2006 - 21:50 #16
Undskyld, der manglede et komma

  DoCmd.RunSQL ("INSERT INTO tLog ( StartTid, SlutTid, Tidsforbrug, QueryName ,Nr)SELECT #" & StartTid & "#,#" & Now() & "#,#" & ForbrugtTid & "#, 'Test'," & NR)
Avatar billede micaud Mester
29. september 2006 - 21:50 #17
Jeg har faktisk bare kopieret din function ind, så der er ' rundt om test. Mangler der eventuelt et komma eller #?
Avatar billede micaud Mester
29. september 2006 - 21:55 #18
Nååå jeg mente nok :-)

Sikkert skide banalt for dig, men jeg synes det er ikke mindre end genialt...

Tusind tak for hjælpen.
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