Fragensteller
Datumsabfrgae über Variable im SQL-String

Allgemeine Diskussion
-
ich verwende Visual Studio 2013
Ich habe ein Problem mit der Datumsabfrage in einem SQL-Befehl. Es geht um folgenden Code:
'aktuelle Reise abfragen
connw.ConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;" &
"Data Source=" & lwnetz & "\einstellungen.mdb"
Dim Aktuelles_Reisedatum As Date
Aktuelles_Reisedatum = Format(Date.Now, "short date")
cmdnw.Connection = connw
cmdnw.CommandText = "SELECT Reise_Nummer FROM Reisen WHERE Reise_Startdatum > " & Aktuelles_Reisedatum & ""
connw.Open()
readertrip = cmdnw.ExecuteReader()
Nach Aufruf des SQL-befehls erscheint folgende Fehlermeldung:
Ein Ausnahmefehler des Typs "System.Data.OleDb.OleDbException" ist in System.Data.dll aufgetreten.
Zusätzliche Informationen: Syntaxfehler in Zahl in Abfrageausdruck 'Reise_Startdatum > 03.03.2014'.Auch eine Änderung (# vor den Ausdruck)
cmdnw.CommandText = "SELECT Reise_Nummer FROM Reisen WHERE Reise_Startdatum > #" & Aktuelles_Reisedatum & "#"
bringt dann folgende Fehlermelung
Zusätzliche Informationen: Syntaxfehler in Datum in Abfrageausdruck 'Reise_Startdatum > #03.03.2014#'.
Ich bin fast am verzweifeln. Ist hier jemand, der mir den richtigen Code geben kann. Ich bin schon jetzt für die Antworten dankbar.
- Typ geändert Ciprian Bogdan Freitag, 21. März 2014 16:22 keine Rückmeldung des Fragestellenden
Alle Antworten
-
Hallo Holger,
ich würde die WHERE Clausel im SQL-String nicht selbst zusammenbauen.
Besser ist es eine Parameterabfrage zu verwenden, das hat nicht nur den Vorteil, dass Du Dich nicht mit der Datumsformatierung auseinandersetzen musst, sondern verhindert auch sich eine Sicherheitslücke ins Programm einzubauen.
Falls Du Hilfe bei Parameterafrage brauchst melde Dich noch mal.
Grüße
Roland
-
cmdnw.CommandText = "SELECT Reise_Nummer FROM Reisen WHERE Reise_Startdatum > ?" cmdnw.Parameters.AddWithValue("DATENOW", Date.Now)
so müsste es in etwa aussehen, wenn Du eine Access Datenbank als Backend nutzt.- Bearbeitet dt125fahrer Montag, 3. März 2014 08:37 Tippfehler
-
cmdnw.CommandText = "SELECT Reise_Nummer FROM Reisen WHERE Reise_Startdatum > ' Aktuelles_Reisedatum.ToString() ' "
Fehlermeldung:
Ein Ausnahmefehler des Typs "System.Data.OleDb.OleDbException" ist in System.Data.dll aufgetreten.
Zusätzliche Informationen: Datentypen in Kriterienausdruck unverträglich.Aber auch ....
cmdnw.CommandText = "SELECT Reise_Nummer FROM Reisen WHERE Reise_Startdatum > " 'Aktuelles_Reisedatum.ToString()' " "brachte keinen Erfolg
Fehlermeldung:
Ein Ausnahmefehler des Typs "System.Data.OleDb.OleDbException" ist in System.Data.dll aufgetreten.
Zusätzliche Informationen: Syntaxfehler (fehlender Operator) in Abfrageausdruck 'Reise_Startdatum >'. -
cmdnw.CommandText = "SELECT Reise_Nummer FROM Reisen WHERE Reise_Startdatum > ' Aktuelles_Reisedatum.ToString() ' "
Fehlermeldung:
Ein Ausnahmefehler des Typs "System.Data.OleDb.OleDbException" ist in System.Data.dll aufgetreten.
Zusätzliche Informationen: Datentypen in Kriterienausdruck unverträglich.Aber auch ....
cmdnw.CommandText = "SELECT Reise_Nummer FROM Reisen WHERE Reise_Startdatum > " 'Aktuelles_Reisedatum.ToString()' " "brachte keinen Erfolg
Fehlermeldung:
Ein Ausnahmefehler des Typs "System.Data.OleDb.OleDbException" ist in System.Data.dll aufgetreten.
Zusätzliche Informationen: Syntaxfehler (fehlender Operator) in Abfrageausdruck 'Reise_Startdatum >'.dann laß doch mal das tostring weg:
cmdnw.CommandText = "SELECT Reise_Nummer FROM Reisen WHERE Reise_Startdatum > '" + Aktuelles_Reisedatum + " ' "
- Bearbeitet sleepy007 Mittwoch, 5. März 2014 12:23
-
jetzt hat es geklappt, dt125fahrer
Folgender Aufruf mit den parametern hat funktioniert. Danke nochmals für die schnelle Hilfe
cmdnw.CommandText = "SELECT Reise_Nummer FROM Reisen WHERE Reise_Startdatum > ?"
cmdnw.Parameters.AddWithValue("DATENOW", Format(Date.Now, "short date"))
connw.Open() -
Falls das Feld "Reise_Startdatum" kein Date Feld ist, würde ich Dir dringend anraten das zu ändern.
Wenn das nicht in Deiner Macht steht, weil die Datenbank nicht in Deiner Verantwortung liegt, wäre es interessant zu wissen in welcher Form das Datum in dem Feld steht.
Falls das Feld vom Typ Text ist, muss das Datumsformat zwingend in der Reihenfolge Jahr, Monat, Tag aufgebaut sein, sonst hast Du keine Chance einen sinnvollen Datumsvergleich durchzuführen.
Grüße
Roland
-
*****************************************************************************************************
Dieser Thread wurde mangels weiterer Beteiligung des Fragestellenden ohne bestätigte Lösung abgeschlossen.
Neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.
*****************************************************************************************************Ciprian Bogdan, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip„Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.