28. marts 2008 - 11:13Der er
7 kommentarer og 1 løsning
Åbn rapport med filter fra SQL
Jeg har en rapport (RptUdskrift)der åbner fra kommandoknapper i en formular. Rapportens udseende er altid den samme, men postkilden består af forskellige SQL sætninger. Det eneste der ændres er det antal poster, der skal vises (f.eks 5, 3 eller 10), eller om det er et antal tilfældige poster.
Et eksempel på postkilden i en rapport:
SELECT TOP 5 Data.ID, Data.Kontonr, KONTI.konto, Data.Dato, Data.Bilagsnr, Data.tekst, Data.Beløb, Data.Momskode, Data.Momsbeløb FROM KONTI RIGHT JOIN Data ON KONTI.Kontonummer = Data.Kontonr WHERE (((Data.Kontonr)=[Forms]![Kontospecifikation]![Kontonr])) ORDER BY Data.Kontonr, Data.Beløb DESC;
Det betyder, at jeg har oprettet ca. 10 rapporter, hvor postkilden er en anelse forskellig. Og der kan nemt komme flere rapporter til. Det bliver hurtigt lidt uoverskueligt.
Det er min opfattelse, jeg må kunne indsætte SQL-sætningerne på kommandoknappens VedKlik hændelse, således at jeg kun skal bruge en formular, der så ændrer postkilde alt efter, hvilken kommandoknap jeg aktiverer.
Jeg mener det er noget med RunSQL, men hvordan ser hele Visual Basic-sætningen lige ud? Og kan det overhovedet lade sig gøre?
Hej Mugs !! Kan du give mig et eksempel på, hvordan hele Visual Basic sætningen skal se ud, for at et klik på kommandoknappen i formularen åbner rapporten "RptUdskrift", og anvender den angivne SQL sætning som postkilde. Det svarer vel lidt til, at der anvendes et filter på tabellens poster.
Hej Mugs !! Håber du har haft en god weekend - og så det svære: Jeg har lavet en VedÅbning hændelse på rapporten (Test):
Private Sub Report_Open(Cancel As Integer) Me.RecordSource = grst.Name End Sub
Så har jeg oprettet et standardmodul (Module1):
Option Compare Database Public grst As Recordset Public Sub testrapport() Set grst = CurrentDb.OpenRecordset("SELECT TOP 10 Data.ID, Data.Kontonr, KONTI.konto, Data.Dato, Data.Bilagsnr, Data.tekst, Data.Beløb, Data.Momskode, Data.Momsbeløb FROM KONTI RIGHT JOIN Data ON KONTI.Kontonummer=Data.Kontonr WHERE (((Data.Kontonr)=Forms!Kontospecifikation!Kontonr)) ORDER BY Data.Kontonr, Data.Beløb DESC")
DoCmd.OpenReport "Test", acwiewPrewiew grst.Close Set grst = Nothing End Sub
Men uanst hvordan jeg åbner rapporten "Test" får jeg en fejlmeddelelse: "Method or datamember not found", og .Name i hændelsesproceduren VedÅbning, er markeret.
Egenskabsarkets Postkilde til formularen er ikke udfyldt. Som du ser er der en WHERE sætning i SQL'en. Den henviser til de fundne poster i en formular, der er åben.
Men uanset om den havde åbnet korrekt, synes jeg, at der er et problem. Skal den SQL sætning, der angiver, hvilke poster, der skal findes, ikke stå på knappens VedKlik hændelse. Ellers ændrer den sig vel ikke alt efter, hvilket knap der klikkes på?
En rigtig god løsning på problemet kunne være, hvis det var muligt at angive det antal poster, der skal findes, i den SQL sætning, der står i Postkilden, som jeg har angivet først i mit spørgsmål. Dvs. hvis det kunne angives, at "TOP 5", i stedet skulle være "[indtast ønsket antal]". Så ville der ikke skulle oprettes en knap for hvert antal, men kun for hver kategori (Største, mindste, tilfældige m.v.).
Og så til sidst mugs - min database fungerer fint, med de begrænsninger, der ligger i, at der skal være en rapport og en knap for hvert ønsket antal. Så brug ikke for meget tid på sagen. Du har såmænd allerede tjent de udlovede points. M.v.h. Knud
Hej Mugs!! Jeg kigger på mulighederne. Points til dig.....
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.