PDA

Vollständige Version anzeigen : Abfragespalten ausblenden je nach Parameter


Orell
26.08.2001, 21:36
Hallo,

eine Abfrage wird durch ein Formular gesteuert. Die Abfrage soll nur die Felder enthalten die im Formular ausgewaehlt wurden (kontrollkaestchen).
Wie geht dem?

Hütti
26.08.2001, 22:21
also,

der einzige weg dies hinzubekommen, ist meiner meinung nach den sql-text zu ändern, also vielleicht mit einer folge von if-bedingungen (ob kontrollkästchen ausgewählt ist) und dann die anzuzeigenden felder an des sql-string anzufügen...

also
dim txtsql as string
txtsql="select feld1"

if ctl1=true then txtsql=txtsql &",feld2"
....

txtsql=txtsql &"from tabelle where parameter"

Pittchen
27.08.2001, 08:23
Hallo Orell,
verstehe ich dich richtig:
Jeder Spalte in der Abfrage ist ein Kontrollkästchen im Formular zugeordnet? Wenn ja, könntest du in der Zeile Kriterien des Abfrage-Entwurfs den Namen des Kontrollkästchens als Kriterium eintragen und diesen Wert auf Wahr setzen; müßte eigentlich funktionieren;
Gruß Pittchen

Orell
27.08.2001, 10:10
Hi Pittchen,
hm, wenn ich in die Kriterien schreibe

[formulare]![myform]![kontrollkaestchen]=wahr

zeigt er mir keine Daten mehr an (aber alle felder)

Pittchen
27.08.2001, 10:40
Hey Orell, Stimmt; da hatte ich einen Denkfehler; ich setz mich heut Mittag mal dran
Gruß Pittchen

Pittchen
27.08.2001, 11:48
Hey Orell,

ein bißchen komplexer ist dein Problem schon, ein Lösung habe ich dir anzubieten; vielleicht geht es ja noch eleganter?
Also:
ich habe auf dem Form den checkboxen Werte zugewiesen: die ich in globalen String – Variablen gespeichert habe:

Public txtArtNr, txtArtBez As String

Private Sub chkArtNr_Click()

If chkArtNr.Value = -1 Then
txtArtNr = " tblArtStammdaten.ArtNr "
Else
txtArtNr = IsNull(txtArtNr)
End If
End Sub

Private Sub chkArtBez_Click()

If chkArtBez.Value = -1 Then
txtArtBez = "," & " tblArtStammdaten.ArtBez "
Else
txtArtBez = IsNull(txtArtBez)
End If

End Sub

Das Problem war dann die Erstellung des sql – Strings für die dynamische Abfrage; Wichtig dabei das Komma in der zweiten CodeZeile der zweiten checkbox;

Dann habe ich zwei Buttons in das Formular eingebaut; einen zu Erstellen der Abfrage und einen zum Wiederlöschen:

Private Sub cmdAbfrageAusführen_Click()
On Error GoTo Err_cmdAbfrageAusführen_Click
Dim qdf As QueryDef
Dim db As Database
Dim sql As String

sql = "SELECT" & txtArtNr & txtArtBez & "From tblArtStammdaten;"

Set db = CurrentDb

For Each qdf In db.QueryDefs
If qdf.Name = "qryMeineAbfrage" Then
db.QueryDefs.Delete qdf.Name
End If
Next qdf

Set qdf = db.CreateQueryDef("qryMeineAbfrage", sql)

DoCmd.OpenQuery "qryMeineAbfrage", acViewNormal, acReadOnly

Exit_cmdAbfrageAusführen_Click:
Exit Sub

Err_cmdAbfrageAusführen_Click:
MsgBox Err.Description
Resume Exit_cmdAbfrageAusführen_Click

End Sub

Private Sub cmdAbfrageLöschen_Click()
Dim db As Database
Dim qdf As QueryDef

Set db = CurrentDb

For Each qdf In db.QueryDefs
If qdf.Name = "qryMeineAbfrage" Then
db.QueryDefs.Delete qdf.Name
End If
Next qdf

End Sub

Ich habe es getestet und es funkt; der Rest ist Fleißarbeit; viel Erfolg;

Gruß Pittchen

Orell
27.08.2001, 14:15
Wir testen das gleich mal. Vielen Dank fuer Deine Hilfe!!

Orell