Ich habe 6 Datenbanktabellen, die Informationen zu Provisionssätzen speichern und welche Rate je nach Kunde/Lieferant/Produkt und Bestelldatum zu verwenden ist.SQL zwischen Datumsbereich Abfrage funktioniert für einige Tabellen, aber nicht für andere
Mit diesen Tabellen habe ich eine Prozedur, um den Betrag der Provision für den Benutzer zu berechnen. Dies funktioniert gut für die ersten Stufen der Ordnung, wie es das aktuelle Datum verwendet, so meine SQL
ist nach dem Vorbild der
Dim p1Dt As New DataTable
Dim pDa As New OleDbDataAdapter("SELECT * FROM [Promotional Rates] WHERE Supp_Code=? AND " & _
"Product_Code=? AND Rate_Start_One <= DATE() AND " & _
"Rate_End_One >= DATE()", con)
pDa.SelectCommand.Parameters.Add("@supplier", OleDbType.VarChar).Value = cmbSupplier.Text
pDa.SelectCommand.Parameters.Add("@product", OleDbType.VarChar).Value = ugr.Cells("Product_Code").Value
pDa.Fill(p1Dt)
Wenn jedoch die Bestellung geliefert wurde, wird die Kommission dann neu berechnet mit das Lieferdatum für das Produkt, das aus der Datenbank entnommen wird.
Mein Code dafür ist ein bisschen anders, da es nicht mit dem aktuellen Datum berechnet wird. Stattdessen bin ich mit diesem Code
Dim deliveryDate As Date
deliveryDate = ugr.Cells("Final_Delivery").Value
Dim p1Dt As New DataTable
Dim pDa As New OleDbDataAdapter("SELECT * FROM [Promotional Rates] WHERE Supp_Code=? " & _
"AND Product_Code=? AND Rate_Start_One <= #" & _
deliveryDate & "# AND Rate_End_One >= #" & _
deliveryDate & "#", con)
pDa.SelectCommand.Parameters.Add("@supplier", OleDbType.VarChar).Value = cmbSupplier.Text
pDa.SelectCommand.Parameters.Add("@product", OleDbType.VarChar).Value = ugr.Cells("Product_Code").Value
pDa.Fill(p1Dt)
Wenn ich den Final_Delivery
Wert als 2017.11.03 (11. März) zu speichern, die deliveryDate
Wert wird als 2017.11.03 zugeordnet.
Ich habe eine Rate in der Promotional Rates
Tabelle für den gesamten März, so erwarte ich die obige Abfrage, um 1 Zeile in der Tabelle zu haben, jedoch gibt es 0 zurück, so verwendet die falschen Werte für die Kommission.
Das passiert nicht, wenn ich die DATE()
Methode verwende, findet es alle Zeilen in den Tabellen korrekt, so liegt das Problem irgendwo in der Art, wie ich Daten in der zweiten Methode eingabe.
Warum sollte die zweite Methode die Zeile in der Datenbank nicht finden, wenn ich die Abfrage in diesem Format schreibe?
EDIT
Dies ist die vollständige CommandText
, nachdem er über die OleDbDataAdapter
Variable schweben und kopieren und einfügen und CommandText
"SELECT * FROM [Promotional Rates] WHERE Supp_Code=? AND Product_Code=? AND Rate_Start_One " & _
"<= #11/03/2017# AND Rate_End_One >= #11/03/2017#"
Die Daten in der Datenbank, um zu beweisen, dass es die richtigen Daten bekommen hat in:
Vertriebslinien (Für den Final_Delivery
Wert)
Werbe Preise (für den Datumsbereich)
Sie haben Parameter für Lieferant und Produkt verwendet, Sie können/sollten die Daten als Datumsparameter angeben. Format und Kultur spielen keine Rolle mehr (sofern es sich um Termine in der Datenbank handelt). – Plutonix