Guten Tag
Ich bin kompletter Access-Neuling :(
Soweit hab ich schonmal eine Tabelle mit Daten angelegt. Danach ein Formular und darin 2 Kombinationsfelder. Bei den Kombifeldern kann man was auswählen und dann über einen Button die Liste im Formular nach den Kombifeldern sortieren lassen.
Den Code hab ich dank Google gefunden und konnte den anpassen. Soweit funktioniert alles, solange ich bei der Tabelle den Felddatentyp auf kurzer Text lasse.
Jetzt müsste ich bei einem Feld aber eben etwas berechnen. Das Feld nächster_Prüfung soll aus Feld letzte_Prüfung und Prüfintervall berechnet werden. Das ist soweit auch kein Problem, nur kann ich dann nicht mehr filtern weil es wahrscheinlich kein Text mehr sondern ein berechnet es Feld ist.
Bei folgendem Code erhalte ich den Fehler:
Sub BuildFiltStr()
thefilter = ""
If Me!boxPrüfung <> "" Then
thefilter = "[nächste_Prüfung] = '" & Me!boxPrüfung & "'"
End If
If Me!boxPrüfer <> "" Then
If thefilter = "" Then
thefilter = "[Prüfer] = '" & Me!boxPrüfer & "'"
Else
thefilter = thefilter & " AND [Prüfer] = '" & Me!boxPrüfer & "'"
End If
End If
' MsgBox thefilter
If thefilter = "" Then
Me.Filter = ""
Me.FilterOn = False
Else
Me.Filter = thefilter
Me.FilterOn = True
End If
End Sub
Kann ich hier thefilter = "[nächste_Prüfung] = '" & Me!boxPrüfung & "'" irgendwo ändern, dass es klar ist, dass das kein Text sondern ein berechnetes Feld mehr ist?
Wäre super glücklich, wenn mir da jemand helfen könnte. Hab schon alles Kombinationen mit ' und "" löschen durch, tut trotzdem nicht.
herzlichen Dank!
PS: hab ich vergessen, vielleicht ist das auch noch wichtig. Das Kombinationsfeld der letzten Prüfung lasse ich über bei Fokuserhalt mit dem Code Me.boxPrüfung.RowSource = "SELECT DISTINCT nächste_Prüfung FROM DATA;" füllen.
Hallo,
das berechnete Feld spielt keine Rolle. Aber wie berechnet wird. Also zeige bitte mal die Berechnung.
In welcer Zeile kommt der Fehler ?
ZitatIf Me!boxPrüfer <> "" Then
Wo kommt hier der Leerstring ("") her ?
Im Regelfall kann es keine Felder geben mit "". Leere Felder sind NULL (=nix)
PS:
Bitte verwende für Codedarstellungen die Codetags. Ich hab das oben in Deinem Beitrag gemacht.
Hallo Gisi,
du kannst selbstredend nur auf in der Datenquelle des Formulars enthaltenen Feldern filtern. Ein Filterausdruck kann aber durchaus einen Berechnung mit diesen Feldern enthalten und dann als Filter für die Datenquelle benutzt werden. Allerdings muß das Ergebnis der Berechnung mit dem Datentyp des geprüften Feldes übereinstimmen.
Hallo zusammen
Wow, danke für die beiden Einträg! Ich bin dankbar um jeden Hinweis.
Ich lasse das Feld nächste_Prüfung so berechnen: letzte_Prüfung + Prüfungsintervall - das Resultat ist dann eben eine Zahl und da liegt wohl das Problem.
Im Debug-Modus färbt sich bei mir die Zeile
Me.Filter = thefilter
Ich hab aber gesehen, wenn ich das Tabellenfeld nächste_Prüfung als Text definiere, dann würde es mir keinen Fehler angeben. Deshalb denke ich, dass da wohl das Problem liegt. Jetzt weiss ich bloss nicht, wie ich dem Code sagen kann, dass es sich bei nächste_Prüfung eben nicht um text sondern um eine Zahl handelt.
Ich hab mal ein paar PrintScreens angehängt - vielleicht ists dann verständlicher
Hallo,
bei Zahl statt Text entfallen die Hochkomma.
Man Klaus, wärst du jetzt hier, würde ich glatt einen ausgeben. DANKE!
So ne einfache Sache und ich hab Stunden verbraten! HERZLICHEN DANK FÜR DIE HILFE!!!! ich schätze das extrem!
Grüsse und einen schönen Feierabend!
Hallo,
Wieso überhaupt "Text"?
Ein Datum ist eine Zahl (Double), auch wenn nur das Jahr verwendet wird.
Ein Prüfer sollte eine ID haben, was auch eine Zahl ist.
gruss ekkehard
Hallo Ekkehard,
wo siehst Du da ein Datum ?
Hier ist nur das Jahr im Spiel, auch das Intervall ist das Jahr.
Hallo Gisi,
hier mal eine kleine Vereinfachung für deine Routine:
Sub BuildFiltStr()
Dim theFilter As String
theFilter = ""
If Me!boxPrüfung <> "" Then
theFilter = " AND [nächste_Prüfung] = " & Me!boxPrüfung
End If
If Me!boxPrüfer <> "" Then
theFilter = theFilter & " AND [Prüfer] = '" & Me!boxPrüfer & "'"
End If
theFilter = Mid$(theFilter, 6)
' MsgBox thefilter
Me.Filter = theFilter
Me.FilterOn = (theFilter <> "")
End Sub
und bitte immer "Option Explicit" verwenden!
Gruß
Knobbi38
Hallo,
@klausSpielt doch keine Rolle, - eine Jahreszahl ist auch eine Zahl, wie
der Name schon sagt.
Der Auslöser war
Zitatsolange ich bei der Tabelle den Felddatentyp auf kurzer Text lasse.
@knobbi
Du hättest mich ruhig unterstützen können bezügl. PrüferID
theFilter = theFilter & " AND [Prüfer] = " & Me!boxPrüfer
Das Kombi gehört entsprechend um-/eingestellt.
gruss ekkehard
@Beaker s.a. ZitatDu hättest mich ruhig unterstützen können bezügl. PrüferID
Hast recht. Gisi hat auch bereits einen weiteren Thread aufgemacht, wo es um das Thema Kombobox geht. Mir ging es erstmal nur darum, die Logik hinter dem Code etwas zu entzerren.
Grüße Ulrich