Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Datumsabfrage SQL (BETWEEN)

Begonnen von arink, Januar 24, 2011, 12:33:02

⏪ vorheriges - nächstes ⏩

arink

Guten Tag zusammen,

ich habe folgendes SQL Statement in Access


Krit=""

If Not IsNull(Me!DatumStart AND Me!DatumEnde) Then Krit = Krit & " AND InstDatum BETWEEN '" & Me!DatumStart & "' AND  '" & Me!DatumEnde & " '"


SQL = "SELECT * FROM Bestand "
  If Krit <> "" Then
    Krit = Mid(Krit, 5)
    SQL = SQL & "WHERE " & Krit


Wenn ich die Suche nun starte(onClick) dann kommt der Laufzeitfehler 2001. Sie haben die vorherige Aktion abgebrochen.

Wenn ich das Statement nun änder auf "AND InstDatum LIKE ... " und suche nur nach dem StartDatum dann funktioniert die Abfrage.
Habe ich einen Fehler beim Zusammensetzen des Statements?


bahasu

Hallo,

was passiert "mit ohne" and:
If Not IsNull(Me!DatumStart AND Me!DatumEnde) Then Krit = "InstDatum BETWEEN '" & Me!DatumStart & "' AND  '" & Me!DatumEnde & " '"

Wegen Krit="" kannst Du Dir ersparen Krit= Krit & ...
Welchen Feldtyp hat DatumStart?

Harald
Servus

database

#2
Hallo,

versuch mal den untenstehenden Code.


Dim strDatumStart as String, strDatumEnde as String, strSQL as String, Krit as String

strDatumStart = Format(Me!DatumStart, "\#yyyy\-mm\-dd\#")
strDatumEnde = Format(Me!DatumEnde, "\#yyyy\-mm\-dd\#")

If Not IsNull(Me!DatumStart AND Me!DatumEnde) Then Krit = "InstDatum BETWEEN " & strDatumStart & " AND " & strDatumEnde

strSQL = "SELECT * FROM Bestand "
   If Krit <> "" Then
       Krit = Mid(Krit, 5)
       strSQL = strSQL & "WHERE " & Krit
   End If


Warum so?....
siehe donkarl.com   http://www.donkarl.com?FAQ6.8

HTH

arink

Es kommt nun kein Fehler aber ein Popup in der ein Parameterwert gewünscht ist, ein Ergebnis kommt nicht zustande.

database


arink

Im Anhang ist ein Screenshot, wenn ich das Start und Enddatum eingeben und dann auf Suchen klicke erscheint dieses Fenster, wenn ich dann was eingebe passiert nichts!?

[Anhang gelöscht durch Administrator]

DF6GL

Hallo,

da hast Du wohl "Datum"  als Feldname verwendet, und dieses Feld existiert gar nicht, oder Du willst das akt. Datum erhalten und hast dabei die Klammern hinter "Datum" (  --> Datum()  ) vergessen 

arink

InstDatum ist ein Tabellenfeld, ansonsten kann ich nicht erkennen wie dieser Pop UP zu stande kommt, ich werde weiter forschen

DF6GL

Hallo 


irgendetwas heißt "Datum" , und so ein Feld (in Tabelle oder Formular oder SQL-Statement) gibt es nicht.

database

Hallo,

es geht nicht um InstDatum sondern um ein Feld namens Datum - das verwendest du irgendwo in deinem Code obwohl es ein solches Feld nicht gibt - vielleicht ein Schreibfehler!

Poste doch bitte mal eine  K O P I E deines aktuell verwendeten Codes!


arink

Das ist der Code. Dieser hat bis zu der Ergänzung der Zeile mit dem Datum auch das getan was es sollte.


Private Sub MakeSQL()
Dim strDatumStart As String, strDatumEnde As String, TestVon As Double, TestBis As Double, Tmp1 As String, Tmp As String, Itm
  Krit = ""
 
  strDatumStart = Format(Me!DatumStart, "\#yyyy\-mm\-dd\#")
  strDatumEnde = Format(Me!DatumEnde, "\#yyyy\-mm\-dd\#")

  If Not IsNull(Me!Firma) Then Krit = Krit & " AND Firma LIKE '" & Me!Firma & "*'"
  If Not IsNull(Me!Artikelname) Then Krit = Krit & " AND Artikelname LIKE '" & Me!Artikelname & "*'"
  If Not IsNull(Me!Seriennr) Then Krit = Krit & " AND Seriennr LIKE '" & Me!Seriennr & "*'"
  If Not IsNull(Me!MAC) Then Krit = Krit & " AND MAC LIKE '" & Me!MAC & "*'"
  If Not IsNull(Me!IPEI_SARI) Then Krit = Krit & " AND IPEI_SARI LIKE '" & Me!IPEI_SARI & "*'"
  If Not IsNull(Me!Kategorie) Then Krit = Krit & " AND Kategorie LIKE '" & Me!Kategorie & "*'"
 
  If Not IsNull(Me!DatumStart And Me!DatumEnde) Then Krit = "InstDatum BETWEEN " & strDatumStart & " AND " & strDatumEnde & ""
 

  SQL = "SELECT * FROM Bestand "
  If Krit <> "" Then
    Krit = Mid(Krit, 5)
    SQL = SQL & "WHERE " & Krit

    End If
End Sub

DF6GL

Hallo,


der Code ist nicht die Klick-Prozedur des Such-Buttons...

Hast Du nun auch alle anderen genannten Stellen nachgeprüft??


Das:

If Not IsNull(Me!DatumStart And Me!DatumEnde) then

würde ich noch in

If Not (IsNull(Me!DatumStart) or Isnull(Me!DatumEnde)) then

ändern.

database

#12
Hallo,

mein Vorschlag hat auf dem Code in deinem Startbeitrag aufgesetzt.
Der schaut aber jetzt ein wenig anders aus - in deinem letzten Beitrag.
So passt natürlich die Zeile mit dem InstDatum NICHT!



Private Sub MakeSQL()
Dim strDatumStart As String, strDatumEnde As String, TestVon As Double, TestBis As Double, Tmp1 As String, Tmp As String, Itm
 Krit = ""
 
 strDatumStart = Format(Me!DatumStart, "\#yyyy\-mm\-dd\#")
 strDatumEnde = Format(Me!DatumEnde, "\#yyyy\-mm\-dd\#")

 If Not IsNull(Me!Firma) Then Krit = Krit & " AND Firma LIKE '" & Me!Firma & "*'"
 If Not IsNull(Me!Artikelname) Then Krit = Krit & " AND Artikelname LIKE '" & Me!Artikelname & "*'"
 If Not IsNull(Me!Seriennr) Then Krit = Krit & " AND Seriennr LIKE '" & Me!Seriennr & "*'"
 If Not IsNull(Me!MAC) Then Krit = Krit & " AND MAC LIKE '" & Me!MAC & "*'"
 If Not IsNull(Me!IPEI_SARI) Then Krit = Krit & " AND IPEI_SARI LIKE '" & Me!IPEI_SARI & "*'"
 If Not IsNull(Me!Kategorie) Then Krit = Krit & " AND Kategorie LIKE '" & Me!Kategorie & "*'"
 
 If Not (IsNull(Me!DatumStart) Or Isnull(Me!DatumEnde)) then
     Krit = " AND InstDatum BETWEEN " & strDatumStart & " AND " & strDatumEnde
 End If
 

 SQL = "SELECT * FROM Bestand "
 If Krit <> "" Then
    Krit = Mid(Krit, 5)
    SQL = SQL & "WHERE " & Krit
 End If

End Sub


Achte darauf, dass die Gänsefüße dort stehen wie sie oben zu sehen sind!

HTH

p.s. hoffe, Bestand ist eine Tabelle und keine Abfrage ... sonst könnte sich der Parameteraufruf auch von dort anschleichen

arink

Danke! Es klappt. War es jetzt das fehlende AND??

database

Hallo,

2 Dinge:

1.  in deinem Startbeitrag hattest du die Datumsfelder zum Vergleich OHNE die notwendige Konvertierung ins US / ISO - Format verwendet.

2. Nachdem der Code unbekannterweise NICHT vollständig war, hatte ich angenommen, dass es sich bei der Art, wie die SQL zusammengesetzt wurde um einen Schreibfehler handelt und habe daher den Code umgeschrieben.

Nach dem Letzten Posting aber war klar woran es dann krankte - der SQL-String wurde fehlerhaft zusammengesetzt wodurch beim Abarbeiten des Codes offensichtlich Inst und Datum getrennt wurden und Datum mit einer Parameterabfrage 'versorgt' werden sollte.

Richtig zusammengesetzt und ordnungsgemäß formatierte Datumsübergaben lassen dann Wohlgefallen aufkommen  ;) :D

Bitte den Thread in DEINEM ERSTEN Beitrag auf 'gelöst' setzen - DANKE!