Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Welcher VariablenType ?

Begonnen von zorlayan, Januar 09, 2022, 02:14:27

⏪ vorheriges - nächstes ⏩

zorlayan

Hallo zusammen,

ich habe eine Abfrage (Ubersicht) aus verschiedenen Tabellen
ich habe ein Formular (Ubersicht) aus dieser Abfrage und in dem Formular habe ich einen TextFeld gebunden an einem Button damit ich im Formular etwas suchen kann.
Dafür habe ich folgenden code erstellt aber funtioniert teilweise nicht richtig, bekomme immer Meldung "Unzulässige verwendung von null" obwohl der TextFeld nicht leer ist.

Was ich suche ist: MER65421354678555

hat das mit VariablenType zutun? Wenn ja, unter welchen VariablenType fällt meine Suchkriterie ?

Übrigens nach RechNr suchen funktioniert ohne Probleme aber nach WinNr leider nicht.

Hier ist der Code:

Private Sub Suchen1_Click()
On Error GoTo Err

Dim query As QueryDef
Dim strWhere As String

Dim Zaehler As Integer

'Nach RechNr suchen

If Not IsNull(Me.SuchText) Then
Dim RechNr As String
RechNr = Me.SuchText

Set query = CurrentDb().QueryDefs("Ubersicht")
query.SQL = "SELECT Rechnung.RechDatum, Rechnung.RechNr, Auto.AutoWIN, Auto.AutoMarke, Auto.AutoModell " & _
"FROM (Rechnung INNER JOIN Auto ON Rechnung.RechNr = Auto.AutoID) INNER JOIN Kunde ON Rechnung.RechNr = Kunde.KunID " & _
"WHERE (((Rechnung.RechNr)= " & RechNr & "));"



Zaehler = DCount(RechNr, "Ubersicht") 'Zählt die Abfrage
MsgBox ("Es sind " & Zaehler & " Datensätze gefunden"), vbOKOnly
If Zaehler = 0 Then
        MsgBox "Rechnungsnummer existiert nicht, bitte überprüfen!"
        Me.SuchText.SetFocus

Exit Sub
Else
DoCmd.OpenQuery "Ubersicht", acViewNormal, acReadOnly
DoCmd.Close
DoCmd.OpenForm "Ubersicht", acNormal
End If
End If

'Nach WinNr Suchen
If Not IsNull(Me.SuchWIN) Then
Dim WinNr As String
WinNr = Me.SuchWIN


Set query = CurrentDb().QueryDefs("Ubersicht")
query.SQL = "SELECT Rechnung.RechDatum, Rechnung.RechNr, Auto.AutoWIN, Auto.AutoMarke, Auto.AutoModell " & _
"FROM (Rechnung INNER JOIN Auto ON Rechnung.RechNr = Auto.AutoID) INNER JOIN Kunde ON Rechnung.RechNr = Kunde.KunID " & _
"WHERE (((Auto.AutoWIN)= " & WinNr & "));"



Zaehler = DCount(WinNr, "Ubersicht") 'Zählt die Abfrage
MsgBox ("Es sind " & Zaehler & " Datensätze gefunden"), vbOKOnly
If Zaehler = 0 Then
        MsgBox "WIN-Nummer existiert nicht, bitte überprüfen!"
        Me.SuchText.SetFocus

Exit Sub
Else
DoCmd.OpenQuery "Ubersicht", acViewNormal, acReadOnly
DoCmd.Close
DoCmd.OpenForm "Ubersicht", acNormal
End If
End If
'Ende WIN Suche



Exit_cmd:
 Exit Sub
'Fehlermeldung
Err:
 MsgBox Err.Description
 MsgBox "Eingabe überprüfen!", vbOKOnly
 Resume Exit_cmd

End Sub

zorlayan

ok, ich habe mein Fehler gefunden.
Es gab zwei Textfelder zum suchen und einer ist immer leer wenn ich etwas suche deswegen kam die Null-Meldung

zorlayan

aber jetzt kommt etwas anderes als Fehler undzwar in der Zeile:

Zaehler = DCount(WinNr, "Ubersicht") 'Zählt die Abfrage
WinNr hat den Wert "MER65421354678555" im Suchfeld.

die Fehlermeldung lautet: "Der Ausdruck, den Sie als Abfrageparameter eingegeben haben, hat folgenden Fehler verursacht: 'MER65421354678555'

was könnte falsch gelaufen sein?

Vielen Dank im Voraus

DF6GL

#3
Hallo,

wenn es sich bei den Tabellenfeldern um Datentyp TEXT handelt, (was lt. Beispiel mindestens bei "WinNr" der Fall ist) müssen die Kriterien-Variablen mit Hochkommata umschlossen werden:

Zitat"WHERE (((Rechnung.RechNr)= '" & RechNr & "'));"

"WHERE (((Auto.AutoWIN)= '" & WinNr & "'));"

Zudem ist anzuraten, vorsichtshalber immer LONG für die Deklaration von Ganzzahlen-Variablen zu benutzen.

Weiterhin:  Warum wird nicht gleich der Kriteriums-Parameter der DCount-Funktion benutzt, anstatt zuerst eine  Abfrage mit den Kriterien zu generieren?
Und die Kriteriumsvariable (bzw. den Wert) auch für das Tabellenfeld zu nutzen, ist eh unsinnig.
(Abfrage ohne Kriterium):

<Korr>
ZitatZaehler = DCount("*", "Ubersicht", "RechNr= '" & RechNr  & "'") 'Zählt die Abfrage
</Korr>

zorlayan

Hallo vielen Dank für die Unterstützung und Tips aber die Meldung ist immer noch da  :'(

schaut dann code so aus wenn der gesuchte Datensatz als kurz-Text in der Tabelle formatiert ist:

Zaehler = DCount("*", "Ubersicht", "AutoWIN= " & '"WinNr"' ) 'Zählt die Abfrage

oder so:

Zaehler = DCount("*", "Ubersicht", "AutoWIN= '" & WinNr & "')  'Zählt die Abfrage

Danke

Maxel

Zaehler = DCount("*", "Ubersicht", "AutoWIN= '" & WinNr & "'")
Viele Grüße
Maxel


Maxel

Viele Grüße
Maxel

zorlayan

ok, so funktioniert ohne probleme.

Zaehler = DCount("*", "Ubersicht", "AutoWIN= '" & WinNr & "')  'Zählt die Abfrage

Maxel

Zitat von: zorlayan am Januar 09, 2022, 11:44:06ok, so funktioniert ohne probleme.

Das kann nicht sein, Dein Code ist falsch!

Kopieren, nicht abtippen!
Viele Grüße
Maxel

DF6GL

Hallo,

irgendwo ist ein Missverständnis:


Wenn Du mich meinst:
ZitatDein Code war ja richtig.

Nein, der war falsch. Ich hatte die Hochkommata bei DCount zuerst "unterschlagen", was ich aber vorhin korrigiert habe.


Und bei zorlayan :

Zitatok, so funktioniert ohne probleme.

Zaehler = DCount("*", "Ubersicht", "AutoWIN= '" & WinNr & "'")  'Zählt die Abfrage

fehlt der Gänsefuß vor der schließenden Klammer.

zorlayan

Zitat von: Maxel am Januar 09, 2022, 11:48:12
Zitat von: zorlayan am Januar 09, 2022, 11:44:06ok, so funktioniert ohne probleme.

Das kann nicht sein, Dein Code ist falsch!

Kopieren, nicht abtippen!

aber funktioniert wirklich :)