21. april 2004 - 00:15Der er
15 kommentarer og 2 løsninger
Count(S.ID) hvor S.Institution er knyttet til Abonnent.Institutio
Jeg har en query hvor som tæller sager i fra min tabel (Count(Sager.ID)), hvor der er en række kriterier, bl.a. "(Sager.Institution = Institutioner.ID)". Altså antal sager for en given institution.
På hver institution er imidlertid også angivet en abonnent, hvor institutionen hører under. Der kan sagtens være flere institutioner under hver abonnent.
Spørgsmålet er hvilket kriterie skal jeg bruge for at tælle alle sager hvor Sager.Institution hører unden en given abonnent?
Min join ser sådan ud: "Institutioner AS I RIGHT JOIN Abonnenter AS A ON I.Abonnent = A.RekvKode". For en god ordens skyld, "RekvKode" er abonnenter's primary key som knyttes til Institution.Abonnent.
Glemte lige et delspørgsmål: Efter min query virker, skal den bruges i en subform. Afhængig af andre parametre man skruer på på formen, skal subformen bruge én af tre mulige queries, med de samme felter.
Hvordan udskifter jeg RecordSource på en subform? Synes jeg har prøvet alt! Jeg kan sagtens ændre på selve subform-objectet på min form, men ikke ændre på min form.
Jeg prøver med 'Forms("SagerPrHenvKodeGruppeDatasheet").RecordSource = "blah blah"', men får en fejl om at formen ikke kan findes. Hvad gør jeg galt?
Jeg forstår ikke lige dit første spm (igen er det blevet sent og min hjerne er gået i seng), men sidste del kan jeg i hvert fald på rygraden:
Forms![Hovedformuar]![Underformularnavn].Form.Recordsource = "select...." eller den kortere, hvis du kalder koden fra hovedformularen: Me![Underformularnavn].Form.Recordsource = "select...."
Du har jo DB'en. Hvis du kigger fx. på den query der hedder "KonsultationerPrInstitution" så er kriteriet for statistiken bl.a. at institutionen skal være den der er valgt på statistik formen. Nu finder jeg så ud at kunden også har brug for statistik på hele abonnenter. Dvs. udover det som "KonsultationerPrInstitution" kan, istedet for at tælle pr. institution skal den tælle pr. institution UNDER den valgt abonnent.!? Formulerer mig skidt så sent! ;)...
Statistik på inst. A, B eller C enkeltvis virker. Men, Abonnent3 har måske inst. A, B og C under sig og ønsker en samlet statistik for alle de institutioner den har under sig.
Forms!SagerPrHenvKodeGruppe!SagerPrHenvKodeGruppeDatasheet.Form.RecordSource = "SELECT..." og Forms!Statistik!SagerPrHenvKodeGruppeDatasheet.Form.RecordSource = "SELECT..." giver begge samme fejl, at formen ikke kan findes.
Prøver jeg derimod 'Me!SagerPrHenvKodeGruppe.Form.RecordSource = "SELECT..."' får jeg error 2101 the setting you entered isn't valid for this property!?
jeg beklager, men selv efter 6 timers søvn, så kan jeg stadig ikke helt gennemskue hvad alt det her går ud på :o(
Men mht recordsourcen, så skal du være opmærksom på at det er navnet på underformular-objektet (og ikke nødvendigvis navnet på formularen) som du skal referere til. Du finder det rigtige navn ved at åbne hovedformularen i designvisning og klikke på underformularen ÉN gang. Herefter kan egenskaben Navn aflæses.
Ok, nu virker mine queries og subforms også - men, den rapport som skal vise alle de data og som bruger de samme subforms som min statistik form, kan kun vise SagerPrHenvKode for Institutioner!
Hvis jeg vælger Abonnent eller Alle, så er det bare tomt. Burde RecordSource ikke være opdateret på subforms, uanset om de vise i en rapport eller en form?
Gaab, det er sent og jeg kan ikke tænke ordenligt - der er stadigvæk en af mine queries som ikke virker, skal lige se om jeg kan forklare det på en anden måde end tidligere :)
Så kan Abonnenterne (eller kunderne) have en eller flere Institutioner under sig, fx. store virksomheder kan have flere forskellige afdelinger oprettet som instituioner. Til hver sag er tilknyttet en institution som via denne har en tilknytning til en abonnent. Jeg skal altså kunne tælle antallet af sager som er regisreret på en institution som hører under den abonnent jeg har valgt.
Håber at jeg fik formuleret det klarer denne gang!? :)
For Institutioner beregnes et af statistikfelterne således (S=Sager, I=Institutioner):
3KonsIndividuel: (SELECT Count(S.ID) AS CountOfID FROM Sager AS S WHERE ((S.Modtaget BETWEEN [FORMS]!Statistik.txtFra AND [FORMS]!Statistik.txtTil) AND (S.Institution = I.ID) AND (S.Konsultationer<=3) AND (S.Gruppesag=FALSE)))
Hmm, som du beskriver der her: "Jeg skal altså kunne tælle antallet af sager som er regisreret på en institution som hører under den abonnent jeg har valgt.", sammenholdt med din egen SQL, så burde den jo bare se således ud: SELECT Count(Sager.Institution) AS Antal FROM Abbonnenter INNER JOIN (Institutioner INNER JOIN Sager ON Institutioner.ID = Sager.Institution) ON Abbonnenter.RekvKode = Institutioner.Abonnent WHERE (((Sager.Modtaget) Between [FORMS]![Statistik].[txtFra] And [FORMS]![Statistik].[txtTil]) AND ((Sager.Konsultationer)<="3") AND ((Sager.Gruppesag)=False) AND ((Abbonnenter.RekvKode)=[Angiv RekvKode]));
Får en fejl: The syntax of the subquery is incorrect, men jeg kan sgu ikke lure hvor!?
Har prøvet en anden approach: For hvert felt i queryen har jeg designet den i querydesigneren (lidt nemmere:)), og har sådan en her:
SELECT Count(Sager.Sagsnr) AS CountOfSagsnr, Abonnenter.RekvKode, Sager.Modtaget, Sager.Gruppesag FROM (Abonnenter INNER JOIN Institutioner ON Abonnenter.RekvKode = Institutioner.Abonnent) INNER JOIN Sager ON Institutioner.ID = Sager.Institution GROUP BY Abonnenter.RekvKode, Sager.Modtaget, Sager.Gruppesag HAVING (((Abonnenter.RekvKode)=[FORMS]![Statistik].[cbxStatFilter]) AND ((Sager.Modtaget) Between [FORMS]![Statistik].[txtFra] And [FORMS]![Statistik].[txtTil]) AND ((Sager.Gruppesag)=False));
Hvilket i min verden burde give total antal sager for den givne Abonnent indenfor det givne tidsrum, men selvom jeg har skrevet "Count(Sager.Sagsnr)" så tæller den dem ikke sammen, den lister et antal records hvor værdien i CountOfSagsnr ligger mellem 1 og et par stykker. Hvis jeg ændrer Count til GroupBy får jeg samtlige sager med de førnævnte kriterier men ikke talt sammen hvorfor?
Ville det hjælpe hvis du får den nye DB eller evt. bare den fulde SQL streng til query'en?
Med list mostlen rundt tror jeg det lykkedes, har du mulighed for at se om nedenstående ser helt tosset ud hvis du paster det ind i query designeren?
SELECT Abonnenter.RekvKode, (SELECT Count(Sager.Sagsnr) AS CountOfSagsnr FROM Abonnenter INNER JOIN (Institutioner INNER JOIN Sager ON Institutioner.ID=Sager.Institution) ON Abonnenter.RekvKode=Institutioner.Abonnent WHERE (((Sager.Modtaget) Between FORMS!Statistik.txtFra And FORMS!Statistik.txtTil) And ((Sager.Gruppesag)=False) And ((Abonnenter.RekvKode)=FORMS!Statistik.cbxStatFilter))) AS TotSagerIndividuel, (SELECT Sum(Sager.Konsultationer) AS SumOfKonsultationer FROM Abonnenter INNER JOIN (Institutioner INNER JOIN Sager ON Institutioner.ID = Sager.Institution) ON Abonnenter.RekvKode = Institutioner.Abonnent WHERE (((Sager.Modtaget) Between [FORMS]![Statistik].[txtFra] And [FORMS]![Statistik].[txtTil]) AND ((Sager.Gruppesag)=False) AND ((Abonnenter.RekvKode)=[FORMS]![Statistik].[cbxStatFilter]))) AS KonsAntalIndividuel, (SELECT Count(Sager.Sagsnr) AS CountOfSagsnr FROM Abonnenter INNER JOIN (Institutioner INNER JOIN Sager ON Institutioner.ID = Sager.Institution) ON Abonnenter.RekvKode = Institutioner.Abonnent WHERE (((Sager.Modtaget) Between [FORMS]![Statistik].[txtFra] And [FORMS]![Statistik].[txtTil]) AND ((Sager.Gruppesag)=False) AND ((Abonnenter.RekvKode)=[FORMS]![Statistik].[cbxStatFilter]) AND ((Sager.Konsultationer)<=3))) AS 3KonsIndividuel, (SELECT Count(Sager.Sagsnr) AS CountOfSagsnr FROM Abonnenter INNER JOIN (Institutioner INNER JOIN Sager ON Institutioner.ID = Sager.Institution) ON Abonnenter.RekvKode = Institutioner.Abonnent WHERE (((Sager.Modtaget) Between [FORMS]![Statistik].[txtFra] And [FORMS]![Statistik].[txtTil]) AND ((Sager.Gruppesag)=False) AND ((Abonnenter.RekvKode)=[FORMS]![Statistik].[cbxStatFilter]) AND ((Sager.Konsultationer)<=5))) AS 5KonsIndividuel, (SELECT Count(Sager.Sagsnr) AS CountOfSagsnr FROM Abonnenter INNER JOIN (Institutioner INNER JOIN Sager ON Institutioner.ID=Sager.Institution) ON Abonnenter.RekvKode=Institutioner.Abonnent WHERE (((Sager.Modtaget) Between FORMS!Statistik.txtFra And FORMS!Statistik.txtTil) And ((Sager.Gruppesag)=True) And ((Abonnenter.RekvKode)=FORMS!Statistik.cbxStatFilter))) AS TotSagerGruppe, (SELECT Sum(Sager.Konsultationer) AS SumOfKonsultationer FROM Abonnenter INNER JOIN (Institutioner INNER JOIN Sager ON Institutioner.ID = Sager.Institution) ON Abonnenter.RekvKode = Institutioner.Abonnent WHERE (((Sager.Modtaget) Between [FORMS]![Statistik].[txtFra] And [FORMS]![Statistik].[txtTil]) AND ((Sager.Gruppesag)=True) AND ((Abonnenter.RekvKode)=[FORMS]![Statistik].[cbxStatFilter]))) AS KonsAntalGruppe, (SELECT Count(Sager.Sagsnr) AS CountOfSagsnr FROM Abonnenter INNER JOIN (Institutioner INNER JOIN Sager ON Institutioner.ID = Sager.Institution) ON Abonnenter.RekvKode = Institutioner.Abonnent WHERE (((Sager.Modtaget) Between [FORMS]![Statistik].[txtFra] And [FORMS]![Statistik].[txtTil]) AND ((Sager.Gruppesag)=True) AND ((Abonnenter.RekvKode)=[FORMS]![Statistik].[cbxStatFilter]) AND ((Sager.Konsultationer)<=1))) AS 1KonsGruppe, (SELECT Count(Sager.Sagsnr) AS CountOfSagsnr FROM Abonnenter INNER JOIN (Institutioner INNER JOIN Sager ON Institutioner.ID = Sager.Institution) ON Abonnenter.RekvKode = Institutioner.Abonnent WHERE (((Sager.Modtaget) Between [FORMS]![Statistik].[txtFra] And [FORMS]![Statistik].[txtTil]) AND ((Sager.Gruppesag)=True) AND ((Abonnenter.RekvKode)=[FORMS]![Statistik].[cbxStatFilter]) AND ((Sager.Konsultationer)<=2))) AS 2KonsGruppe FROM (Abonnenter INNER JOIN Institutioner ON Abonnenter.RekvKode = Institutioner.Abonnent) INNER JOIN Sager ON Institutioner.ID = Sager.Institution GROUP BY Abonnenter.RekvKode HAVING (((Abonnenter.RekvKode)=[FORMS]![Statistik].[cbxStatFilter]));
Men hvis rapporten ikke er åben får jeg af vide at den ikke findes eller ikke er åben, og hvis den er åben får jeg af vide at jeg ikke kan modificere den når den er åben! :)
Sagen er den at på min hovedrapport har jeg to subreports, og alt efter hvad man vælger i statistikmodulet skal de subreports hente deres data fra en af 3 queries.
Men altså, hvordan ændrer jeg på recordsourcen FØR rapporten er åben? Eller er det ikke den rigtige måde at gøre det på?
Hvis det er muligt, vil jeg meget gerne have svar i løbet af torsdagen så jeg kan kigge på det tordag aften og aflevere fredag til kunden! :)
hmm, jeg får i hvert fald ingen fejl i din SQL, men kan ellers ikke lige gennemskue det hele :o(
Hvis du vil ændre recordsourcen på en rapport, er det lidt besværligt, idet du først skal åbne den i design, lave ændringen, lukke og gemme, og derefter åbne den normalt igen:
Det er ikke det optimale, men jeg har selv benyttet mig af det et par gange og det går ret hurtigt. Som regel når brugeren ikke at opfatte noget.
Man kan skjule en evt flimren ved at skrive Docmd.Echo False først og Docmd.Echo true til sidst. Dette skal dog først gøres, når man er sikker på at det virker, da man mister forbindelsen til programmet, hvis der opstår en fejl undervejs!!
Thomas for helvede, jeg kysser den beskidte jord dine fødder betræder! :)
Jeg må give dig ret, det er ikke den yndigste måde - det burde være muligt "bare" at kunne rette på en rapport uden visuelt at åbne den, men som du siger går det hurtigt!
Tak for hjælpen, hvordan fanden giver jeg dig noget af det karma du mistede under nedbruddet? :)
Jeg går ud fra, at det er dig, som gav mig en god Karma i nat? Tak for det :o) Det varmer da lidt :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.