via formulier sorteer selectie maken en dan rapport printen

Status
Niet open voor verdere reacties.

Friend

Verenigingslid
Lid geworden
31 jan 2009
Berichten
1.137
Beste Forummers,

Als bijlage een test opzetje van een database.

Wat ik graag zou willen verwezelijken is dat wanneer ik het rptNaw uitdraai ik via een voor selectie op een formulier een selectie criteria / sortering aan de qNaw meegeef.

Ik heb 2 frmSort gemaakt.

frmSort1 is misschien niet de methode om dit te doen maar ik hoor graag jullie adviezen.

frmSort2 kan ik iets meer bij voorstellen alleen hoe krijg ik wat ik kies in de juiste kolom van de query?

Of zit ik er helemaal naast en moet dit op een heel andere manier

Graag uw advies en beetje hulp.

Friend
 

Bijlagen

Je zou er nog een derde formulier bij kunnen maken op basis van keuzelijsten (in ieder geval voor de veldnamen) die je baseert op de tabel tblNAW en die als Type 'Lijst met velden' krijgt. Dan hoef je de veldnamen niet meer in te typen. Hetzelfde principe kun je overigens ook loslaten op de Keuzelijst met invoervak.
De reden om een Keuzelijst te gebruiken is dat je die kunt instellen op meervoudige selectie, en (te zien op form1) wil je op meerdere velden kunnen sorteren.

Overigens mis ik een keuzelijst waarmee je waarden filtert, iets waar je het in je vraag wél over hebt. In de Access cursus staan (uiteraard ;) ) alle antwoorden die je zoekt; zo kun je in Hoofdstuk 18 lezen hoe je een recordset dynamisch samenstelt, een techniek die je kunt gebruiken om je filter dynamisch op te bouwen.
Je moet nog wel voor jezelf bepalen of je voor elk gebruikt veld apart de sortering wilt kunnen instellen (frmSort1 kan dat), of dat je voor alle velden dezelfde sorteervolgorde wilt gebruiken (frmSort2).
 
Michel,

Hartelijk dank voor je reactie :thumb:

Ik ben op jouw advies begonnen met het opbouwen volgens hoofdstuk 18 ;)

De uitwerking op frmSort2 gaat goed.

Na toevoeging verwerking van de volgende code opdracht:

Code:
sVelden = Replace(PrimaryKey(Me.cboTabel.Value), ";", ", ")
tmp = Split(sVelden, ",")
For Each itm In Me.lstVelden.ItemsSelected
bCheckVeld = False
If Me.lstVelden.ItemsSelected.Count > 0 Then
For i = LBound(tmp) To UBound(tmp)
If tmp(i) = Me.lstVelden.ItemData(itm) Then
bCheckVeld = True
Exit For
End If
Next i
If bCheckVeld = False Then
If sVelden <> "" Then sVelden = sVelden & ", "
If InStr(1, Me.lstVelden.ItemData(itm), " ") > 0 Then
sVelden = sVelden & "[" & Me.lstVelden.ItemData(itm) & "]"
Else
sVelden = sVelden & Me.lstVelden.ItemData(itm)
End If
End If
Else
Exit Sub
End If
Next itm

Ik loop echter vast bij frmSort3.

Ik krijg in de resultaat lijst aleen maar, 1, 2, 3.

Zou jij je verhelderend licht er over kunnen laten schijnen wat ik fout doe?

Dan kan ik weer door met de volgende stap van de curcus :D

Hartelijk dank.

Friend
 

Bijlagen

Je bent al een heel eind :thumb:
De resultaatlijst heeft een vaste instelling van 1 kolom, en je ziet dus altijd de kolom met het sleutelveld. De rest van de kolommen moet dynamisch worden aangepast, afhankelijk van de keuzes. In de cursus staat dat als het goed is wel uitgelegd, inclusief een manier om de breedte van de kolommen enigszins acceptabel te houden. Dat laatste heb ik in onderstaande code weggelaten.
Code:
Private Sub lstVelden_Click()
Dim ctl As Control
Dim itm As Variant
Dim sVelden As String, strSQL As String
Dim iCol As Integer

    sVelden = Replace(PrimaryKey(Me.cboTabel.Value), ";", ", ")
    tmp = Split(sVelden, ",")
    iCol = UBound(tmp) + 1
    For Each itm In Me.lstVelden.ItemsSelected
        bCheckVeld = False
        If Me.lstVelden.ItemsSelected.Count > 0 Then
            For i = LBound(tmp) To UBound(tmp)
                If tmp(i) = Me.lstVelden.ItemData(itm) Then
                    bCheckVeld = True
                Exit For
            End If
            Next i
            If bCheckVeld = False Then
                If sVelden <> "" Then sVelden = sVelden & ", "
                If InStr(1, Me.lstVelden.ItemData(itm), " ") > 0 Then
                    sVelden = sVelden & "[" & Me.lstVelden.ItemData(itm) & "]"
                Else
                    sVelden = sVelden & Me.lstVelden.ItemData(itm)
                End If
                iCol = iCol + 1
            End If
        Else
            Exit Sub
        End If
    Next itm

    strSQL = "SELECT " & sVelden & " FROM [" & Me.cboTabel & "]"

    With Me.lstResultaat
       .RowSource = strSQL
       .RowSourceType = "Table/Query"
       .ColumnCount = iCol
       .Width = iCol * 1000
    End With

End Sub
 
Michel,

Dank voor je verdere uitleg.

Ik liep nog even vast, maar dat komt denk ik dat op bladzijde 8 van les 18 misschien er nog een haakje sluiten bij moet in dit gedeelte van de code:

Code:
strSQL = "SELECT Max(Len(Nz(" & fldName & ")) AS n FROM [" & tblName & "]"

moet dit niet dit zijn ?
Code:
strSQL = "SELECT Max(Len(Nz(" & fldName & "))) AS n FROM [" & tblName & "]"

Maar nu heb ik de les naar mijn idee af en dan is mijn volgende vraag hoe kan ik nu het rptNaw uitdraaien op bv postcode?

M.a.w. hoe bepaal ik die filter mogelijkheid en dan eventueel ook oplopend en aflopend?

Die link kan ik nog niet leggen.

Graag jouw advies :d

Thanks

Friend
 
Hoe wil je dat gefilterde rapport afdrukken? D.m.v. een selectie vanaf één van de selectieformulieren? (bijv. frmSort3)
 
Hallo Michel,


De gedachte (en de bedoeling ;)) is dat een bestaand rapport met allerlei naw gegevens gesorteerd afgedrukt gaat worden op bv Postcode of op woonplaats of op familienaam etc.

Bij straat zou ik mij kunnen voorstellen dat je eerst op straatnaam en dan ook op huisnr wil sorteren

Ja dus graag vanaf een selectie vanaf frmSort3.

Wat het oplopend en aflopend sorteren betreft, jij zei dat dit via frmSort3 niet mogelijk is maar wel als ik doorbrei op frmSort1?

Hartelijk dank opnieuw voor je altijd tomeloze inzet op dit forum en onze vragen :thumb:

Friend
 
Als je verschillende sorteerregels tegelijk wilt hebben, dan moet je die wel apart afvragen, zoals je in frmSort1 doet. Een andere mogelijkheid is er niet, althans niet op basis van een keuzelijst. Je zou dan een aparte tabel moeten hebben waarin je de filteringen opslaat en uitleest. Zo'n tabel kun je dan wel weer maken op basis van de keuzelijst met velden zoals je die nu gebruikt, maar i.p.v. de selectie in de keuzelijst lstResultaat te zetten, moet het resultaat dus weggeschreven worden naar een aparte tabel. Die je dan vervolgens het beste in een doorlopend formulier kan zetten, omdat je anders geen selectievakjes kunt laten zien.
De werkwijze is dan als volgt:
1. Je maakt een tabel die een veld bevat voor de velden waarop je wilt sorteren. Deze tabel heeft een extra Ja/Nee veld voor de sorteervolgorde.
2. Je vult de tabel met de selectie van de keuzelijst lstVelden. Kies je 4 velden, krijg je 4 records.
3. Een doorlopend formulier laat de records (lees: velden) zien uit de tijdelijke tabel met de selectieveldjes voor de verschillende velden
4. de keuzelijst lstResultaat wordt nu gevuld vanuit het subformulier.

Omdat je de tijdelijke tabel vult vanuit de keuzelijst lstVelden zullen de selectievakjes niet gelijk gevuld zijn. Het resultaat (dat nu dus via de tijdelijke tabel loopt) zal in eerste instantie dan hetzelfde zijn als wat je nu hebt. Zodra je een aanpassing doet in de sortering zal de resultaatlijst dus ook veranderen.

Het rapport (en eigenlijk is dat de simpelste stap van alles) krijgt zijn filtering (nog steeds) vanuit de keuzelijst lstResultaat, waarin je de records selecteert die je in het rapport wilt zien, maar waarbij de velden/sortering dus uit het subformulier wordt gehaald. Needless to say dat ik die constructie niet gemaakt heb, en die uitdaging leg ik dus voorlopig even bij jou neer :).
De technieken die je nodig hebt staan overigens allemaal in de cursus ;). Zoals het maken/vullen van een tijdelijke tabel, en die vervolgens als basis gebruiken voor een formulier.
 
Michel,

Dank voor je uitleg en uitdaging ;) Even voor mijn duidelijkheid. De uitleg en werkwijze die jij beschrijft is voor frmSort1 toch? of is dit ook de basis voor frmSort3. Want ik dacht eerst frmSort3 af te maken en dan frmSort1 proberen te realiseren.

De technieken die je nodig hebt staan overigens allemaal in de cursus . Zoals het maken/vullen van een tijdelijke tabel, en die vervolgens als basis gebruiken voor een formulier.

Weet jij, domme vraag, natuurlijk weet jij dit ook ;) je bent immers zelf de auteur, welk hoofdstuk?

Friend
 
Mijn verhaaltje was gebaseerd op frmSort3, omdat je dan de mooiste opties hebt, denk ik. Want anders moet je (op frmSort1) alle velden los van het formulier uitlezen, en dat is een hoop code. Bovendien ben je dan helemaal niet flexibel.
De hoofdstukken weet ik zo gauw ook niet uit mijn hoofd, maar het zit ergens rond de 14. Het hoofdstuk over flexibele rapporten (met filtering op formulier).
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan