Avatar billede ingolf Nybegynder
25. november 2004 - 11:48 Der er 18 kommentarer og
1 løsning

Gemme html-rapport for hver post

Jeg har brug for at gemme en statisk html-rapport for hver post i min database.
Hver post skal gemmes i en fil som html-rapport, hvor ID-nr (op til 5 cifre) for hver post skal bruges som filnavn.
Jeg har idag en kommandoknap på formularsiden for rapporten der kun skal udskrives. Dette ønsker jeg at fortsætte med.
Men hvordan klarer jeg at gemme en statisk html-rapport der automatisk skal navngives med ID-nummeret på den aktuelle post?
Det er altså vigtig at gemmefunktionen kan gemme automatisk ved tryk på en ny kommandoknap på formularsiden, uden at jeg manuel skal navngive filen.
Avatar billede terry Ekspert
25. november 2004 - 12:45 #1
If I understand your question correctly then you already have a report which shows you ALL of your records, and now you wantto be able to do it only for the current record?

if this is correct then you need to alter the reports query so that it has a criteria which references the form
The criteria would look something like this:

Forms!YourForm!YourField

You can use the expression builder to do this. In the query right click in thecriteria field and select build. Then its just a case of finding the form/field you want to use
Avatar billede ingolf Nybegynder
25. november 2004 - 12:57 #2
Terry
Jeg har den rapport jeg vil bruge. Rapporten viser kun en post af gangen.
Hver post skal gemmes i en fil som html-rapport.
25. november 2004 - 13:10 #3
Prøv denne funktion, som gennemløber en hel tabel. Du skal lave en rapport, som viser hver post på hver sin side:


Dim ID As Long                      'ID er primærnøgle i tabellen og bruges til at identificere hver post
Const Sti = "C:\Dokumenter\HTMLfiler"  'Sti til der hvor filerne skal gemmes

Public Function GemSomHTML()
    On Error Resume Next
    Dim n As Long
    Dim rs As ADODB.Recordset
    Dim cn As ADODB.Connection
    Set rs = New ADODB.Recordset
    Set cn = CurrentProject.Connection
    rs.Open "Dintabel", cn, adOpenStatic
    If Dir(Sti, vbDirectory) = "" Then  'Hvis stien ikke findes, prøv da at oprette den (kan dog kun oprette ét niveau ned)
        MkDir Sti
        If Err Then
            MsgBox "Stien findes ikke!", vbCritical, "Opret sti"
            Exit Function
        End If
    End If
    n = 0
    Do Until rs.EOF                    'gennemløb alle poster
        n = n + 1
        ID = rs!ID
        DoCmd.OutputTo acOutputReport, "Dinrapport", acFormatHTML, Sti & "\DinFil" & n & ".html"
        rs.MoveNext
    Loop
   
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Function

Jeg har et eksempel liggende her: http://www.makeiteasy.dk/eksempler/UdskrivHTMLsider.zip
Avatar billede ingolf Nybegynder
25. november 2004 - 13:46 #4
thomasjepsen
Alle poster skal gemmes enkeltvis, altså hver post skal gemmes som separat fil, og navnet på hver fil skal være id-nummeret for den enkelte post.
25. november 2004 - 13:55 #5
ja, jeg kan se, at jeg lige manglede at forklare lidt, samt at ændre navnet på filen til ID-nummeret.
Du skal bruge GetID()-funktionen i din rapport-forespørgsel til at adskille hvert ID i hver sin rapport. (prøv at kigge på eksemplet)

Dim ID as Long

Public Function GemSomHTML()
    On Error Resume Next
    Const Sti = "C:\Dokumenter\HTMLfiler"  'Sti til der hvor filerne skal gemmes

    Dim rs As ADODB.Recordset
    Dim cn As ADODB.Connection
    Set rs = New ADODB.Recordset
    Set cn = CurrentProject.Connection
    rs.Open "Dintabel", cn, adOpenStatic
    If Dir(Sti, vbDirectory) = "" Then  'Hvis stien ikke findes, prøv da at oprette den (kan dog kun oprette ét niveau ned)
        MkDir Sti
        If Err Then
            MsgBox "Stien findes ikke!", vbCritical, "Opret sti"
            Exit Function
        End If
    End If
    Do Until rs.EOF                    'gennemløb alle poster
        ID = rs!ID
        DoCmd.OutputTo acOutputReport, "Dinrapport", acFormatHTML, Sti & "\" & ID & ".html"
        rs.MoveNext
    Loop
   
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Function


Public Function GetID() As Long      'Denne funktion bruges af den forespørgel, som rapporten bruger, således at der kun gemmes én post i hver fil
    GetID= ID
End Function
25. november 2004 - 14:00 #6
Jeg har lige lagt en ny kopi af databasen op, som skulle bruge ID og navngive korrekt.

Prøv at hente den og se om ikke det er korrekt?
25. november 2004 - 14:01 #7
NB: Den starter automatisk op og lægger filerne i C:\Dokumenter\HTMLFiler
25. november 2004 - 15:18 #8
Kan du få det til at virke?
Avatar billede ingolf Nybegynder
25. november 2004 - 15:50 #9
thomasjepsen
Jeg skal have nogle dage til at afprøve dit forslag. Foreløbig kan jeg sige, at det ser interessant ud. Så hav lidt tålmod.
25. november 2004 - 15:52 #10
Det er helt ok :o)
Men det er godt, at du siger det!
Avatar billede ingolf Nybegynder
25. november 2004 - 16:32 #11
Jeg har konstateret at rapporter med underformularer ikke kan gemme underformularen når der gemmes i html format. Hvad gør man så for at knække den nød?
25. november 2004 - 16:52 #12
hmm, det er nok værre! Hvis den ikke gør det automatisk, så tror jeg ikke, at du kan få den til det. Det er jo en indbyggede funktionalitet i Access uden særlig mange muligheder for at styre udfaldet.

Kan du ike designe rapporten uden underrapporter?
Avatar billede ingolf Nybegynder
25. november 2004 - 16:58 #13
thomasjepsen
Det vil tage mig dage at bygge det om, og det vil ikke være særlig hensigtsmæssigt,så det vil ikke være en farbar vej.

I mellemtiden har jeg konstateret at man kan gemme i snapshot format, også de rapporter med underformularer.

Kunne det sættes ind i automatiken omkring Gem-funktion?
25. november 2004 - 17:06 #14
ja, så skal du bare skifte acFormatHTML ud med acFormatSNP
25. november 2004 - 20:41 #15
Hej Ingolf,

Jeg fik vist konkluderet det med snapshot lidt for hurtigt. Det er rigtigt, at konstanten acFormatSNP findes og benyttes sammen med Docmd.outputTo. Men det viser sig, at lige præcis acFormatSNP (acFormatIIS) kun kan benyttes til at gemme tabeller, forespørgsler og formularer (og altså ikke rapporter!)

Så, hvis du har mulighed for at lave din rapport om til en formular, så skulle denne kode kunne gøre det i stedet:

Dim ID as Long

Public Function GemSomHTML()
    On Error Resume Next
    Const Sti = "C:\Dokumenter\HTMLfiler"  'Sti til der hvor filerne skal gemmes

    Dim rs As ADODB.Recordset
    Dim cn As ADODB.Connection
    Set rs = New ADODB.Recordset
    Set cn = CurrentProject.Connection
    rs.Open "Dintabel", cn, adOpenStatic
    If Dir(Sti, vbDirectory) = "" Then  'Hvis stien ikke findes, prøv da at oprette den (kan dog kun oprette ét niveau ned)
        MkDir Sti
        If Err Then
            MsgBox "Stien findes ikke!", vbCritical, "Opret sti"
            Exit Function
        End If
    End If
    Do Until rs.EOF                    'gennemløb alle poster
        ID = rs!ID
        DoCmd.OutputTo acOutputForm, "DinFormular", acFormatSNP, Sti & "\" & ID & ".snp"
        rs.MoveNext
    Loop
   
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Function
Avatar billede ingolf Nybegynder
02. december 2004 - 18:07 #16
Du får dine point thomasjepsen. Tak for hjælpen.
02. december 2004 - 18:30 #17
tak skal du have :o)

...men du har endnu ikke lukket spm :o)
Avatar billede ingolf Nybegynder
03. december 2004 - 11:39 #18
Jeg har trykket på den forkerte knap. Undskyld.
03. december 2004 - 12:01 #19
det tænkte jeg nok - det sker tit. De burde lave godkendelses-proceduren om.

Men tak igen :o)
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