Tak for indlægget, men jeg er lidt bundet af Access, da det er der, dataene ligger.
Så indtil videre er det den vej, jeg vil forsøge at finde en løsning.
Hvis du har en ide til en kombination, hvor de "flade data" fra Access kan viderebehandles på anden måde, er jeg meget lydhør.
Synes godt om
Slettet bruger
08. juni 2009 - 21:25#3
Nej - den eneste hvorpå du ikke er bundet af access er mht. hvor data ligger.
Heldigvis er implementationen af en database i windows vha. ms-access ikke mere åndsvag, end der er adgang til databasen fra et hvert ordentligt programmeringssprog.
I MS regi: C,C++,C#, asp (vbscript) og sikkert flere, på samme måde som når man anvender recordset i vba.
I java kender jeg til det over ODBC.
Grunden til at det er spild af tid, er at en access raport aldrig bliver andet en noget der skal printes.
Når man bruger tid på at lave en præsentation, er det rimmeligt at have en ambition om det det skal være en generelt anvendelig stream: - kunne sendes, præsenteres i forskellige sammenhænge, kunne renderes som komponent i ander setup, og konvereret til forskellige formaterer.
En access raport (kender kun til access 2000) - kan konvertes til en .rtf fil - dvs. alt hvad der ikke er kontrolelementer eller billeder - så, hvis man er til ascii grafik kan man lave noget anno 1990, der kan sendes eller bruges andre steder.
Ingen anvisninger herfra på at bruge tid på at sammensætte 'viderebehandlet data' i en ms-access raport.
Synes godt om
Slettet bruger
08. juni 2009 - 21:46#4
det er lidt svært når man ikke kan se opbygningen af din/dine rapporter... men du er nød til at styre det fra vba'en lav din forespørgsel, som jo nok er dine ca. 1000 poster, som hver især skal være en rapport, så kører du en løkke, som åbner en rapport op med teksterne fra den pågældende post...
Rapporten er så sat op til at udskrive til en pdf-writer. Du skal nok ind og styre navngivning og hvor den skal gemme fra vba, men det kan helt sikkert lade sig gøre!~)
Jeg kan ikke hjælpe dig meget mere lige nu, da jeg sidder med et andet projekt, men jeg kigger lige på det imorgen.... eller ser interesseret til hvis en anden har smidt en løsning!~)
Hej spg For lige at give dig et indtryk af problemet, så har jeg en tabel med omkring 30.000 records. Disse informationer er lagt ind af omkring 1.000 personer. Tabellen har også en kolonne, hvor personernes ID er angivet, og der er dermed ca. 30 informationer pr. person. Det er derfor disse rapporter skal genereres med et eksemplar (1 pdf-fil) til hver person, der således kan se egne opdateringer. Alt er samlet i denne ene tabel af hensyn til min behandling af data. Jeg håber det giver mening.
Endelig er det af hensyn til kompleksitet og andre personers mulighed for at gennemskue systemet, at jeg har valgt at beholde Access og gøre processerne så enkle som muligt. Altså ikke noget C eller C++, men VBA er OK
Før du begynder med noget fancy til Adobe PDF så check lige M$' egen PDF 'plugin' til Office 2007. Den er rent faktisk ikke så tosset og den er kontrollerbar direkte fra VBA DoCmd.OutputTo acOutputReport, 'reportname', acFormatPDF, 'FileName'
Og det du skal ud i er at danne kriterier for rapporten i et recordsetloop og så udskrive for hver record. I recordsettet vil du nok også kunne finde værdier der kan bruge til navngivning.
Synes godt om
Slettet bruger
09. juni 2009 - 09:34#8
enig med hugopedersen og hvis M$ har lavet et plugin, så bliver det ikke meget nemmere.
I forespørgslen som er postkilde for rapporten, der laver du et kriterie for eks. id på personen: get_global('HentId')
Modul:
************
option compare database option explicit public Gbl_id as string
public function get_global(i as string) select case i case "HentId" get_global=gbl_id end select end function
public function SendPdf dim db as dao.database dim rst as dao.recordset set db=currentdb() set rst=db.openrecordset("NavnPåPersonTabel") with rst .movefirst do Gbl_id = !idPåPerson docmd.outputto acoutputreport, "NavnPåRapport", acformatpdf, "StiHvorDerSkalGemmes\RapportNavn" & !IdEllerNavnPerson & ".pdf" .movenext loop until .eof .close end with end function
***************
Så laver du en knap med: call sendpdf eller du går i immidiate vinduet og skriver sendpdf!~)
PS: der er dog en lille detalje ved metoden - Access kommer med et spørgsmål om man vil overskrive hvis filen eksisterer. Det betyder at man skal lave en funktion der forsøger at slette filen før output hvis det skal være helt automatisk.
PPS: eksemplet kræver at du har et directory på c: der hedder Temp
Synes godt om
Slettet bruger
09. juni 2009 - 09:59#11
man kunne også sætte & Date() & ind i filnavnet!~)
Så har jeg afprøvet modulet, og det virker - dog ikke optimalt endnu.
Jeg har midlertidigt ændret output til xlsx filer, og det giver ingen problemer.
MEN - i linien Gbl_id = !idPåPerson kan jeg ikke gennemskue, hvad der skal stå efter lighedstegnet.
Hvis jeg selv angiver en værdi fra personlisten, virker programmet som det skal (for den person, der er angivet), men hvad skal der skrives, for at programmet selv henter alle de aktuelle værdier?
(det ser ellers rigtig godt ud)
Synes godt om
Slettet bruger
09. juni 2009 - 21:47#15
du skal skrive ! og så navnet på det felt i din forespørgsel, som har den værdi du skal bruge i dit kriterie!~)
Jeg har forsøgt mig med koden fra kommentar #8, rettet til, men ved "sendpdf" fra Immidiate-vinduet får jeg en Run-time Error 3061, "Der er for få parametre. Der var ventet 1."
Mit recordset er en query er det et problem?
Kan jeg evt. få eksemplet tilsendt på mail også? (thomas.fogh.dk snabelting gmail punktum com)
Ja, det var problemet - forsøgte med en tabel, nu spiller det ;O)
Synes godt om
Ny brugerNybegynder
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.