Forum des Access-Tutorials

Codeoptimierung Datenfilterung (VBA)

Nikno, Mittwoch, 22. März 2017, 11:14 (vor 128 Tagen)

Guten Tag,

ich habe eine Suchmaske mit drei Checkboxen und einem Ergebnisdatenblatt. Wenn eine Checkbox angewählt ist, bedeutet dass, das ich in meinem Ergebnis alle Datensätze ausblenden möchte, bei dem dieses Feld Null ist. Bisher brauche ich dafür 2³ Bedingungen in VBA, das ist äußerst suboptimal, insbesondere wenn ich noch mehr Optionen hinzufügen möchte.

Wie kann ich das codetechnisch optimieren?

P.S.
Die Struktur ist bisher

If chkA Then
ElseIf chkB Then
ElseIf chkC Then
ElseIf chkA And chkB Then
...

Codeoptimierung Datenfilterung

Martin Asal, Mittwoch, 22. März 2017, 11:42 (vor 128 Tagen) @ Nikno

Hallo Nikno,

weniger VBA, mehr SQL!

Dein Formular baut ja wohl auf einer Abfrage auf, also

SELECT *, [leere Felder?] Imp IsNull([FeldA]) AS AlleFeldA
FROM Tabelle
WHERE [leere Felder?] Imp IsNull([FeldA])=0;

Den Parameter [leere Felder?] musst du natürlich noch ändern; da gehört die Checkbox hin. Und BeimÄndern einer Checkbox wird per VBA nur noch das Form aktualisiert.

Martin

Codeoptimierung Datenfilterung

Nikno, Montag, 27. März 2017, 12:53 (vor 123 Tagen) @ Martin Asal

Vielen Dank für die Antwort!

Ich habe zu dem SQL-Code allerdings noch ein paar Rückfragen

SELECT *, [leere Felder?] Imp IsNull([FeldA]) AS AlleFeldA
FROM Tabelle
WHERE [leere Felder?] Imp IsNull([FeldA])=0;

1. Bei [leere Felder?] muss ich die Checkbox als Control einfügen?
2. Wofür benötige ich dieses "AS AlleFeldA"?
3. Muss es nicht WHERE [leere Felder?] Imp IsNull([FeldA])=1; heißen? Weil der Imp-Operator 0 ausgibt, wenn das FeldA Null ist und die Checkbox getickt ist, diese Kombination will ich ja aber gerade nicht haben.

Codeoptimierung Datenfilterung

Martin Asal, Montag, 27. März 2017, 13:21 (vor 123 Tagen) @ Nikno

1. Bei [leere Felder?] muss ich die Checkbox als Control einfügen?

Ja.

2. Wofür benötige ich dieses "AS AlleFeldA"?

Wenn du die Abfrage z.B. als Auswahlabfrage ausführen willst, braucht das Feld ja eine Bezeichnung. Da hielt ich es für aussagekräftiger, selbst eine Bezeichnung zu wählen.

3. Muss es nicht WHERE [leere Felder?] Imp IsNull([FeldA])=1; heißen? Weil der Imp-Operator 0 ausgibt, wenn das FeldA Null ist und die Checkbox getickt ist, diese Kombination will ich ja aber gerade nicht haben.

Probier's aus ;-)

Martin

RSS-Feed dieser Diskussion
RSS Einträge  RSS Threads   Kontakt
powered by my little forum