rapport met selectiequery

Status
Niet open voor verdere reacties.

AtroX

Gebruiker
Lid geworden
29 jul 2009
Berichten
29
Hoi,

ik blijf zoeken maar het lijkt me toch niet goed af te gaan :confused:

1) Op het formulier frmMeeting heb ik een knop dat een afdrukvoorbeeld van een rapport maakt. In dat rapport heb ik proberen de query aan te passen maar blijkbaar niet voor de volle 100%.

In het formulier kun je kiezen tussen verschillende meetings. Naargelang de record van de meeting die op dat moment openstaat wil ik een rapport met alle gegevens. Dat werkt bij de eerste meeting (meeting_id = 1) maar niet wanneer ik op de 2de meeting sta. Dan krijg ik een blanco rapport.

Zelfs wanneer ik manueel de waarden voor Meeting_id ingeef krijg ik enkel resultaat bij Meeting_id = 1.

2) Iets gelijkaardigs: bij frmRPSPS Sponsors werk ik met een subformulier. Wanneer ik terug een andere meeting kies bovenaan zou ik graag de gegevens van die meeting krijgen. Nu werkt het weeral enkel met Meeting_id = 1.


Het bestand wordt wat te groot dus ik plaats hier een linkje naar het bestand:

Firms.mdb

Iemand die me terug op weg kan helpen (ik zit nog met zoveel problemen) ? Ik slaag er wel in om een formulier met subformulier te maken maar de gegevens in het subformulier worden plots gefilterd op een waarde uit het veld 'Reaction'. Enkel de records met waarde Positive worden weergegeven. In de ontwerpweergave staat plots 'Expr1006' ipv 'Reaction_id'. Geen idee hoe dat daar komt.
 
Laatst bewerkt:
Het probleem met het rapport is relatief simpel op te lossen. Er zitten in je opzet twee foutjes:
Om te beginnen: de bron van de query klopt niet helemaal. Je hebt een aantal tabellen aan elkaar gekoppeld met een zgn. Equel Join. Dit type join laat alleen records zien waarvan de oveeenkomende records in beide tabellen voorkomen.
In jouw voorbeeld is dat eigenlijk niet het geval. Je hebt bijvoorbeeld de tabel Reaction gekoppeld met een Equal Join, wat inhoudt dat je in het rapport alleen records te zien krijgt van deelnemers waarvan een reactie bekend is. Daarmee sluit je 59 records uit, want je hebt maar 45 reacties. Iets vergelijkbaars met de tabel Sponsorship: 84 uitsluitingen, en maar 20 gerelateerde records.
De oplossing is simpel: je moet in de query het type relatie aanpassen. Dat doe je door in het queryontwerp op de lijn tussen de tabellen te dubbelklikken, en optie 3 (alle records uit [tblRBSPS Sponsors] selecteren .... ). Dit doe je ook voor de overige tabellen waar een selectieprobleem mee is. Je moet er dus voor zorgen, dat je altijd alle records uit [tblRBSPS Sponsors] te zien krijgt.

Het tweede probleem wordt veroorzaakt doordat Access een beetje moeilijk doet als je een rapport wilt filteren. Je kunt met de wizard wel een formulier openen met een filtering, maar geen rapport. Als je dus een knop maakt, zie je in het rapport altijd alle records. Ik zie dat je dat het opgelost door in de query van het rapport een criterium te maken op basis van het formulierveld txtID. Persoonlijk zou ik dat niet doen, omdat je dan altijd het formulier moet gebruiken op het rapport te openen. Ik zou het dus op de volgende manier doen:

Code:
Dim sFilter As String

    sFilter = "Meeting_Id = " & Me.txtid.Value
    stDocName = "rptMeeting"
    DoCmd.Minimize
    DoCmd.OpenReport stDocName, acPreview, , sFilter
    Exit Sub

Hiermee wordt het filter alleen toegepast als je het rapport start vanuit het formulier. Je kunt nu dus altijd het standaardrapport starten zonder problemen.

Ik zal nog kijken naar het probleem met je formulier.
 
Eerste probleem is opgelost met het ander join-type. Waarvoor dank.
 
Tweede probleem ook, lag ook aan het join-type. Ik blijf altijd wat verdwaasd omdat ik nooit goed weet wanneer je VBA of query's gebruikt...

Maar we leren bij. Waarvoor een duim omhoog voor de inspanning geleverd door jullie!
 
Toch nog één klein iets:

Waarom sluit dit scriptje alle formulieren behalve telkens 1 (buiten mijn hoofdformulier).

Code:
Function All_Form_Sluiten()
  Dim frm As Form
  
  For Each frm In Forms
    If frm.Name <> "frmMain" Then DoCmd.Close acForm, frm.Name
  Next frm
  
End Function
 
Daar kan ik je wel een antwoord op geven:
Access telt het aantal objecten in de collectie, en voert a.d.h. daarvan een aantal keer de handeling Close uit. Waar je bij een normale loop constructie een gelijk aantal objecten houdt, gebeurt dat bij deze handeling niet. De overgebleven formulieren schuiven namelijk op. Dus: als je drie formulieren open hebt, zou Access er twee moeten sluiten. De formulieren zijn intern genummerd 0,1 en 2
Op het moment dat formulier 0 wordt gesloten, houdt je niet, zoals je zou verwachten, formulieren 1 en 2 over; de formulieren schuiven een plaatsje op in de hierarchie. Formulier 1 wordt dus 0, en 2 wordt 1. Er blijft dus altijd een formulier open, dat niet gesloten kan worden. Buiten het formulier dat je open wilt houden. Welk formulier dat is, hangt af van de volgorde waarin ze zijn geopend.

Ik neem aan, dat je behalve een uitleg ook nog wel een oplossing wilt... ;)
Die is er: onderstaande functie.

Code:
Function All_Form_Sluiten()
Dim frm As Form, intX As Integer, intCount As Integer
   
   intCount = Forms.Count - 1
    For intX = intCount To 0 Step -1
        If Forms(intX).Name <> "frmMain" Then DoCmd.Close acForm, Forms(intX).Name
   Next

End Function

Michel
 
Dat vind ik nou eens super uitgelegd :-) Ik had er niet bij stilgestaan dat de plaats van de formulieren zouden veranderen.

Thx, en bij deze zijn al mijn problemen van de baan en heb ik de db kunnen afwerken. Heel erg bedankt voor de inspanning!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan