On Wed, 12 Oct 2005 09:41:41 +0200, Dj Uncas <mads@blizan.com> wrote:
>Du kan godt lave en sql-sætning der finder info i en sætning. Det bliver
>noget lignende:
>
>SELECT tblMedlemmer.Id AS MedlemId, tblMedlemmer.Navn AS MedlemNavn,
>tblKontingent.KontingentId AS KontId, tblKontingent.MedlemId AS
>KontMedlemId WHERE (MedlemId = KontMedlemId)
>
>evt. kan du ogå putte dette på, og finde oplysninger for et enkelt
>medlem: AND (MedlemId = '" & strId & "')
Jo, det er jeg godt klar over (det er vel blot en alm.
JOIN-forespørgsel).
Den har så den ulempe, at den kun vil udtrække medlemmer, hvor der
faktisk er sket en kontingent-indbetaling. Det kan man så løse med en
LEFT/RIGHT JOIN.
Men problemet opstår, når jeg så vil filtrere på kontingenttabellen.
Hvis jeg fx kun vil udtrække for et bestemt år (fx ... WHERE
Year(tblKontingent.KontingentMaaned) = 2005). Resultatet af dette er,
at jeg så ikke får de medlemmer med i kontingentskemaet, der endnu
ikke har betalt kontingent for i år.
Og selv om man kombinerer det med en IS NULL:
.... WHERE Year(tblKontingent.KontingentMaaned) = 2005 OR
tblKontingent.KontingentMaaned IS NULL
så vil det godt nok medtage de medlemmer i oversigten, der slet ikke
har indbetalt kontingent, men ikke de medlemmer, der fx ikke har
betalt for 2005, men nok for 2004.
Jeg er foreløbig landet på en "workaround", hvor jeg laver to udtræk:
Et af hele medlemslisten og så ét af kontingenterne for det pågældende
år. De bliver så flettet sammen i tre loops indeni hinanden:
' Loop gennem medlemmer
For intMedlCount = 0 To intMaxMedl
' - genererer tabelrækkerne
' Loop gennem månederne
For a = 1 To 12
' Loop gennem kontingentudtrækket
For intKontCount = 0 To intMaxKont
' - finder ud af om der er en "post", der matcher det
' pågældende MedlemsId og den pågældende måned
' Hvis den findes, udskrives den i en tabelcelle
' Hvis ikke udskrives et tomt felt
Selv om de trækkes ud med .GetRows, så er der stadigvæk lidt for meget
loop-arbejde efter min smag - den skal jo faktisk gennem den sidste
loop 12 gange for hvert medlem. Nu er det ikke en megastor forening,
så det går nok, men nævn ikke ordet skalering
Så jeg ville gerne have en lidt mere optimal SQL-forespørgsel, hvis
det kan lade sig gøre.
Mvh. og tak for svar,
Jørn
--
Jørn Andersen,
Brønshøj