Hallo liebe Access-Experten,
ich habe ein Suchformular nach diesem Vorbild erstellt. "https://www.youtube.com/watch?v=xq6pzJZqfRo"
Alles funktioniert soweit wunderbar.
Private Sub cbxCountry_AfterUpdate()
Me.Requery
End Sub
Private Sub cbxPhase_AfterUpdate()
Me.Requery
End Sub
Private Sub cbxSegment_AfterUpdate()
Me.Requery
End Sub
Private Sub cbxStatus_AfterUpdate()
Me.Requery
End Sub
Private Sub txtBusiness_description_AfterUpdate()
Me.Requery
End Sub
Private Sub txtCity_AfterUpdate()
Me.Requery
End Sub
Private Sub txtCompany_name_AfterUpdate()
Me.Requery
End Sub
Private Sub cmdDelete_filters_Click()
Me.cbxCountry = ""
Me.cbxPhase = ""
Me.cbxSegment = ""
Me.cbxStatus = ""
Me.txtBusiness_description = ""
Me.txtCity = ""
Me.txtCompany_name = ""
Me.Requery
End Sub
Der cmdDelete_filters tut seinen Dienst.
Jetzt möchte ich meine Datensätze mit einem txt_Date_from und einem txt_Date_until zusätzlich eingrenzen können.
Dafür bin ich hier im Forum auf das folgende Abfragekriterium gestoßen.
>=Nz([Formulare]![frm_analyse]![txtDate_from];#01.01.1990#) Und <=Nz([Formulare]![frm_analyse]![txtDate_until];#01.01.2200#)
damit lassen sich die Datensätze nun filtern, wie gewünscht. Ich habe VBA ergänzt:
Private Sub cbxCountry_AfterUpdate()
Me.Requery
End Sub
Private Sub cbxPhase_AfterUpdate()
Me.Requery
End Sub
Private Sub cbxSegment_AfterUpdate()
Me.Requery
End Sub
Private Sub cbxStatus_AfterUpdate()
Me.Requery
End Sub
Private Sub txtBusiness_description_AfterUpdate()
Me.Requery
End Sub
Private Sub txtCity_AfterUpdate()
Me.Requery
End Sub
Private Sub txtCompany_name_AfterUpdate()
Me.Requery
End Sub
Private Sub txtDate_from_AfterUpdate()
Me.Requery
End Sub
Private Sub txtDate_until_AfterUpdate()
Me.Requery
End Sub
Private Sub cmdDelete_filters_Click()
Me.cbxCountry = ""
Me.cbxPhase = ""
Me.cbxSegment = ""
Me.cbxStatus = ""
Me.txtBusiness_description = ""
Me.txtCity = ""
Me.txtCompany_name = ""
Me.txtDate_from = ""
Me.txtDate_until = ""
Me.Requery
End Sub
Doch immer wenn ich jetzt "delete Filters" anklicke kommt "Laufzeitfehler '3420': Das Objekt ist ungültig, oder es ist nicht mehr festgelegt." und in allen Datensatzfeldern erscheint #Name?
Es muss also etwas mit dem Abfragekriterium nicht stimmen, oder der Datenfilter muss anders in VBA eingespeist werden oder? :-\
Bin noch ein totaler Anfänger also am besten für Dumme erklären, wenn jemand eine Idee hat.
Tausend Dank schon mal im Voraus, das Forum hat mir schon oft geholfen aber das ist mein erster Thread.
Gruß D.
Hallo,
ich empfehle dir, die Felder beim Löschen auf NULL einzustellen, zumindest bei den neuen Datumsfeldern ist das notwendig.
Meinst du so?
Private Sub cmdDelete_filters_Click()
Me.cbxCountry = ""
Me.cbxPhase = ""
Me.cbxSegment = ""
Me.cbxStatus = ""
Me.txtBusiness_description = ""
Me.txtCity = ""
Me.txtCompany_name = ""
Me.txtDate_from = "0"
Me.txtDate_until = "0"
Me.Requery
End Sub
Der Fehler bleibt leider.
Edit:
Wenn ich es so einstelle:
Me.txtDate_from = 0
Me.txtDate_until = 0
Kommt kein Fehler mehr, aber es werden gar keine Datensatzfelder mehr angezeigt.
Nein, ich meinte schon das Wort "NULL" (ohne Gänsefüßchen), so wie ich es geschrieben hatte, das ist ein spezieller "Un-Wert", nicht 0 oder "".
PS:
Hast du schonmal drüber nachgedacht, wozu die NZ-Funktion gut ist?
Hallo,
ein Leerstring ("") ist nicht NULL.
Du muss wirklich NULL zuweisen.
Me.cbxCountry = NULL
usw.
Hallo Damian,
Was die beiden meinen ist:
NULL <> Null.
Null (0) ist eine Zahl; - NULL ist Nichts, na da.
Private Sub cmdDelete_filters_Click()
Me.cbxCountry = NULL
Me.cbxPhase = NULL
Me.cbxSegment = NULL
Me.cbxStatus = NULL
Me.txtBusiness_description = ""
Me.txtCity = ""
Me.txtCompany_name = ""
Me.txtDate_from = NULL
Me.txtDate_until = NULL
Me.Requery
End Sub
gruss ekkehard
Hallo,
@ekkehard
Du hast 3 vergessen, oder warum lässt Du die aus ?
Zitat von: MaggieMay am Oktober 17, 2016, 11:06:20
Nein, ich meinte schon das Wort "NULL" (ohne Gänsefüßchen), so wie ich es geschrieben hatte, das ist ein spezieller "Un-Wert", nicht 0 oder "".
PS:
Hast du schonmal drüber nachgedacht, wozu die NZ-Funktion gut ist?
Vielen Dank, genau das hatte ich natürlich nicht ausprobiert. Es funktioniert! :D
Ich habe es zuvor immer mit der "Zwischen ... Und ..." Funktion probiert, aber das hat nicht geklappt, die "Nz" habe ich einfach so probiert. Ich werde die genaue Bedeutung mal recherchieren oder jemand erklärt sie mir hier im Kontext zu meiner Anwendung, das wäre sehr nett. :)
Danke auch an die anderen für die schnelle Hilfe.
Zitat von: Access-HilfeApplication.Nz-Methode
Sie können die Nz-Funktion verwenden, um Null, eine leere Zeichenfolge (Leere Zeichenfolge: Eine Zeichenfolge, die keine Zeichen enthält. Sie können eine leere Zeichenfolge verwenden, um anzugeben, dass für ein Feld kein Wert vorhanden ist. Um eine leere Zeichenfolge einzugeben, geben Sie zwei Anführungszeichen ohne Leerzeichen ein ("") ein.) (" ") oder einen anderen angegebenen Wert zurückzugeben, wenn eine Variable des Typs Variant den Wert Null aufweist. Sie können diese Funktion z. B. verwenden, um einen Wert Null in einen anderen Wert zu konvertieren und so zu verhindern, dass der Wert durch einen Ausdruck verbreitet wird.
Kurz gesagt, mit Hilfe der NZ-Funktion lassen sich Ersatzwerte festlegen, wenn ein Feld leer (NULL) ist - genau so wie du das bei dem Datumsvergleich machst.
Hallo Klaus,
Welche 3 denn, - sorry ?? :-[
ekkehard
Na, die drei die du in deinem Vorschlag nicht auf NULL gesetzt hast! ;-)
Hallo,
Au man, ich hoffe es wird nicht schlimmer ;)
Weil das Textfelder sind, die ich normalerweise auf vbNullString setze um die zu
leeren, - NULL geht natürlich auch.
Frag mich nicht, vielleicht wollte ich den TS nicht noch mehr verwirren ...
gruss ekkehard