23. marts 2010 - 07:41Der er
6 kommentarer og 1 løsning
Begraense udskrift
Jeg er som frivillig medarbejder ved et velfaerdscenter i faerd med at omlaegge databasen for de der besoeger centeret. Den gamle database bestod af en enkel tabel med en raekke for hver familie og cirka 60 kolonner med, paa en ikke-normaliseret maade, oplysninger om familieoverhoved, partner, og boern. Der bestod en rapport over tabellen som blev skrevet ud med en side for hver familie i et ringbind ("kaft" paa hollandsk, centeret ligger i Antwerpen.)
Jeg har saa normaliseret dataerne saa der, blandt andet, er en tabel "Person" med data for hver familieoverhoved, partner, og barn. Jeg har en formular der for hver person viser disse data og, ved hjaelp af en raekke subformularer, viser familiesammenhaeng o.s.v. Den formular er elektronisk tilgaengelig. Man vil ogsaa gerne have den skrevet ud men kun for visse personer (stort set de gamle familieoverhoveder.) Jeg har derfor i Person tabellen lavet en kolonne "Kaft" med datatype Ja/Nej hvor jeg viser om Kaften skal indeholde en side for den person.
Men jeg kan ikke faa kun kaft-personerne skrevet ud. Her er hvad jeg har forsoegt: Jeg har placeret kaft feltet (som ikke-synlig) i formularen og har lavet en knop "print." Saa har jeg lavet denne onclick kode for "print"
Private Sub print_Click() If Me.kaft = True Then DoCmd.PrintOut End If End Sub
Men resultatet er at hele mollevitten bliver skrevet ud.
Hvordan skal jeg begraense udskriften til de hvor kaft er true?
Ved i den forespørgsel, der ligger til grund for rappporten, at indsætte dit kriterie.
Eller også at indsætte kriteriet i din udskrivningskommando. Du har jo ikke noget kriterie, men fortæller blot, at der skal udskrives hvis Kraft er True. Kriteriet skal ligge i kommandoen. Men da flere personer kan have Kraft = True, skal du finde et andet kriterie f.eks. tabellens primære nøgle.
mugs, god morgen. Sen reaktion fordi jeg er paa skiferie og sneen og konen ogsaa kraever tid.
Jeg fik vist ikke formuleret problemet tydeligt nok (maaske lider jeg af sneblindhed.) Jeg har en formular der viser enkelte linier (til forskel fra gennemloebende, jeg kan igen ikke huske de danske betegnelser) saaledes at jeg ser en side ad gangen. Kilden er tabellen Persoon hvor der er 620 personer. Jeg kan saaledes i formularen navigere mellem 620 sider, hver side viser oplysninger om en person. Fra den formular vil True.
Ved hjaelp af dit svar kom jeg i tanker om en noedloesning (det er ikke ret tit, maaske kun en enkelt gang, at jeg skal have skrevet alle 176 ud, derefter skal jeg kun skrive de sider ud hvor der er rettelser) nemlig midlertidig at aendre kilden til en query "SELECT * FROM Persoon WHERE kaft = True".
Men jeg haabede paa en loesning (og saadan var spoergsmaalet ment) hvor de fremtidige brugere (naar jeg ikke laengere arbejder ved centeret) fra den samme formular enten kan kikke paa alle 650 records eller vaelge at trykke de 176 ud. Jeg proevede ved at placere knappen "kaft" og skrive kode for knappen saaledes at de 176 blev skrevet ud efter tryk paa knappen.
Du siger "indsaette kriteriet i din udskrivningskommando" og at jeg nu ikke har noget krieterie. Det har jeg et par spoergsmaal til (husk du skriver til en amatoer, selv om jeg af og til oever mig ved at besvare spoergsmaal der ligger indenfor hvad jeg har laert.)
(1) Jeg troede at "kaft = True" var et krieterium. Hvad menes der i stedet for, i denne sammenhaeng, med krietria?
(2) Jeg troede at den ovenstaaende kode i on_click eventen for knappen kaft var en udskrivningskommando. Hvordan goer man det og hvor placerer man det?
(3) Saa har jeg eksperimenteret med det du viser i #2. Hvis jeg skriver det foelgende faar jeg fejlmelding at typerne ikke stemmer overens:
Private Sub Knop94_Click() DoCmd.OpenForm "frmPersoon", acPreview, , "[qryPersoonKaft]![kaft]" = -1 End Sub
Hvis jeg retter -1 til True faar jeg samme problem. Hvis jeg retter til "True" gaar den igennem, men saa faar jeg alle 620 records, ikke de der har kaft = true.
Jeg haaber paa din hjaelp - igen - til disse problemer.
Sneblindheden slaar til igen. Jeg skulle have skrevet at ud af de 620 personer i tabellen Persoon har 176 True for kaft, og det er disse 176 der skal skrives ud.
Private Sub print_Click() If Me.kaft = True Then DoCmd.PrintOut End If End Sub
Indeholder ikke noget kriterie, der begrænser posterne ved udskrivning. Den siger jo kun, at hvis feltet kaft er = true, så skal der udskrives, men ikke hvad der skal udskrives
Min kode:
Docmd.openreport "DIN RAPPORT", ac viewpreview, ,"[DIN TABEL] ![kaft] = -1"
indeholder et kriterie, i pseudokode lyder den:
Åben rapporten "DIN RAPPORT" til skærm, der hvor "DIN TABEL" i feltet "kaft" er = -1
Der har du jo begrænset posterne i en where-clause (kriterie. Hvis du får de forkerte poster ud, skal du ændre -1 til 0
mugs, saa er jeg tilbage i aktion. Hotellet havde tabt internet forbindelsen i morges hvilket vil sige at jeg havde tabt internet forbindelsen.
I din #2 var der faldet et " vaek i "[DIN TABEL] ![kraft] = -1
Jeg proevede alle muligheder for at placere det manglende ", aabenbart undtagen den korrekte som du giver i #5, nemlig "[DIN TABEL] ![kaft] = -1" hvilket resulterede enten i syntaks fejl eller besked at systemet ikke kunne finde det paagaeldende felt.
Nu virker det saaledes at naar jeg trykker paa knappen faar jeg en preview der bestaar af de sider hvor kaft = true. Naar jeg saa trykker paa print all saa faar jeg den rigtige udskrift.
Tak for hjaelpen endnu en gang. Points er paa vej.
Beklager det manglende anførselstegn - Tak for point.
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.