Avatar billede woolbox Nybegynder
21. april 2004 - 00:15 Der 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.

På forhånd tak! :)
Avatar billede woolbox Nybegynder
21. april 2004 - 00:20 #1
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?
21. april 2004 - 00:30 #2
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...."
Avatar billede woolbox Nybegynder
21. april 2004 - 00:45 #3
Hey Thomas, sover du aldrig? ;)

Tak for subform delen, prøver jeg lige.

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.

Håber et hjalp - bare lidt! :)
Avatar billede woolbox Nybegynder
21. april 2004 - 00:53 #4
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!?
21. april 2004 - 09:15 #5
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.
Avatar billede woolbox Nybegynder
16. maj 2004 - 05:48 #6
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?

Har du nogle bud?
Avatar billede woolbox Nybegynder
16. maj 2004 - 06:15 #7
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 :)

Som det se på mit smukke diagram (lavet i Word :)): http://www.rask.d2g.com/diverse/eksperten.dk/spm/491619/statistik_relationer.png.

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)))
Avatar billede woolbox Nybegynder
16. maj 2004 - 06:16 #8
Fordi jeg er en kegle til at beskrive hvad jeg vil ha' hjælp til og kompleksisteten forhøjer jeg med 40 point...
17. maj 2004 - 12:33 #9
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]));
Avatar billede woolbox Nybegynder
18. maj 2004 - 08:30 #10
Aah, det skal selvfølgelig bindes op på abonnenter... cool, det skal prøves! :)
Avatar billede woolbox Nybegynder
20. maj 2004 - 03:11 #11
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?
Avatar billede woolbox Nybegynder
20. maj 2004 - 03:17 #12
Hov, hvis du er på nu (er du psyko) - så vent lidt... :)
Avatar billede woolbox Nybegynder
20. maj 2004 - 04:15 #13
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]));
Avatar billede woolbox Nybegynder
20. maj 2004 - 04:40 #14
Mht. min første kommentar: Hvordan ændrer man recordsource for en report der ikke er åben? Jeg prøver med:

Reports!SagerPrHenvKodeIndividuel.Report.RecordSource = SagerPrHenvKodePrAbonnentGruppe

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! :)
20. maj 2004 - 10:15 #15
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:

    DoCmd.OpenReport "Dinrapport", acViewDesign
    Reports!fsfsd.RecordSource = "DinForespørgsel"
    DoCmd.Close acReport, "Dinrapport", acSaveYes
    DoCmd.OpenReport "Dinrapport", acViewPreview

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!!
Avatar billede woolbox Nybegynder
21. maj 2004 - 01:42 #16
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? :)
21. maj 2004 - 09:34 #17
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)
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