Solved

Not returning correct data using sql syntax and vb.net 2005

Posted on 2007-12-05
7
235 Views
Last Modified: 2012-08-13
Hi,

I have a access database that I am talking to using vb.net 2005. The format of the access cell is DD/MM/YYYY. If the date is set as 03/12/2007 in the access cell and I use the following sql statement: -

        rs.Open("Select * from products WHERE Sold = true AND Delivery between #" & DateTimePicker1.Value.ToString("MM/dd/yyyy") & "# AND #" & DateTimePicker2.Value.ToString("MM/dd/yyyy") & "#", conn)

It returns the correct data when I set the between to 02/12/2007 - 04/12/2007

When I use the following sql statement that I need: -

        rs.Open("Select sum(TaxCost + NetDelCost) as DeliveryNetttotal , Sum(NetDelCost) as DeliveryGrossTotal from products WHERE Sold = true AND Delivery between #" & DateTimePicker1.Value.ToString("MM/dd/yyyy") & "# AND #" & DateTimePicker2.Value.ToString("MM/dd/yyyy") & "#", conn)

It does not show any data when the same between to 02/12/2007 - 04/12/2007 is used.

If I use this statement again and set the between to 02/12/2007 - 12/12/2007 it returns the correct data.

What am I doing wrong please.

Best Regards
Lee
0
Comment
Question by:ljhodgett
7 Comments
 
LVL 77

Expert Comment

by:peter57r
ID: 20412805
Could TaxCost or NetDelCost be Null?
0
 
LVL 55

Accepted Solution

by:
Jaime Olivares earned 500 total points
ID: 20412872
You should use "yyyy-MM-dd" for sql queries
0
 

Author Comment

by:ljhodgett
ID: 20413005
Hi,

There both set to numbers in access so no nulls are present. Also I have tried yyyy-MM-dd but it still does not work.

Best Regards
Lee
0
3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

 
LVL 27

Expert Comment

by:MikeToole
ID: 20413741
What is rs dimmed as? Is this classic ADO rather than ADO.net?
0
 

Author Comment

by:ljhodgett
ID: 20413975
Hi,

I've have attached the full code below. I am using clissic ado at the momment for this program.

Best Regards
Lee
Public Class frmDeliveryReport
 

    Dim rs As ADODB.Recordset

    Dim Statement As String

    Dim rpt As New crItemsSearchResults
 
 

    Private Sub Refresh_Details()
 

        Dim SumDeliveryNett As Double

        Dim SumDeliveryGross As Double
 

        SumDeliveryNett = 0

        SumDeliveryGross = 0
 

        ' MsgBox("Select sum(TaxCost + NetDelCost) as DeliveryNetttotal , Sum(NetDelCost) as DeliveryGrossTotal from products WHERE Sold = true AND Delivery between #" & DateTimePicker1.Value.ToString("MM/dd/yyyy HH:mm:ss") & "# AND #" & DateTimePicker2.Value.ToString("MM/dd/yyyy") & "#")
 

        Connect()

        rs = New ADODB.Recordset

        rs.CursorLocation = ADODB.CursorLocationEnum.adUseClient

        rs.CursorType = ADODB.CursorTypeEnum.adOpenKeyset

        rs.Open("Select sum(TaxCost + NetDelCost) as DeliveryNetttotal , Sum(NetDelCost) as DeliveryGrossTotal from products WHERE Sold = true AND Delivery between #" & DateTimePicker1.Value.ToString("yyyy-MM-dd") & "# AND #" & DateTimePicker2.Value.ToString("yyyy-MM-dd") & "#", conn)

        'rs.Open("Select * from products WHERE Sold = true AND Delivery between #" & DateTimePicker1.Value.ToString("MM/dd/yyyy") & "# AND #" & DateTimePicker2.Value.ToString("MM/dd/yyyy") & "#", conn)
 

        MsgBox(rs.RecordCount)
 
 

        If Not rs.Fields("DeliveryNetttotal").Value Is DBNull.Value Then SumDeliveryNett = rs.Fields("DeliveryNetttotal").Value

        If Not rs.Fields("DeliveryGrossTotal").Value Is DBNull.Value Then SumDeliveryGross = rs.Fields("DeliveryGrossTotal").Value
 

        
 

        rs.Close()

        'conn.Close()
 

        rs = New ADODB.Recordset

        rs.CursorLocation = ADODB.CursorLocationEnum.adUseClient

        rs.CursorType = ADODB.CursorTypeEnum.adOpenKeyset

        rs.Open("Select TaxCost, NetDelCost from products WHERE Sold = true AND Delivery between #" & DateTimePicker1.Text & "# AND #" & DateTimePicker2.Text & "#", conn)
 

        DataSet11.Tables("Delivery_Cost").Clear()
 

        If Not rs.EOF Then rs.MoveFirst()
 

        Do While Not rs.EOF
 

            Dim dr As DataRow = DataSet11.Tables("Delivery_Cost").NewRow()

            dr("DeliveryNett") = "Nett: £" & FormatNumber(rs.Fields("NetDelCost").Value, 2) & "  Gross: £" & FormatNumber(rs.Fields("TaxCost").Value, 2)

            dr("DeliveryGross") = rs.Fields("TaxCost").Value

            dr("DeliveryNettTotal") = SumDeliveryNett

            dr("DeliveryGrossTotal") = SumDeliveryGross
 

            DataSet11.Tables("Delivery_Cost").Rows.Add(dr)

            rs.MoveNext()

        Loop
 

        lstDelivery.ValueMember = "DeliveryNett"

        lstDelivery.DisplayMember = "DeliveryNett"

        lstDelivery.DataSource = DataSet11.Tables("Delivery_Cost")
 

        lblGroosCost.Text = "£" & FormatNumber(SumDeliveryGross, 2)

        lblNettCost.Text = "£" & FormatNumber(SumDeliveryNett, 2)
 
 

        rs.Close()

        conn.Close()

    End Sub
 

    Private Sub frmDeliveryReport_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Refresh_Details()

    End Sub
 

    Private Sub DateTimePicker1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker1.ValueChanged

        Refresh_Details()

    End Sub
 

    Private Sub DateTimePicker2_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker2.ValueChanged

        Refresh_Details()

    End Sub
 

    Private Sub cmdExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdExit.Click

        Me.Close()

    End Sub

End Class

Open in new window

0
 
LVL 27

Expert Comment

by:MikeToole
ID: 20426676
Two suggestions:

1) Add a count to each of the two versions of your sql to confirm that we are in fact dealing with the same number of records:
("Select Count(1) as RecordCount, sum(TaxCost + NetDelCost) as DeliveryNetttotal , Sum(...

2) Convert the dates to a Double instead of to a string that needs to be wrapped with #'s
... WHERE Sold = true AND Delivery between " & DateTimePicker1.Value.ToOADate & " AND " & DateTimePicker2.Value.ToOADate, conn)
 
Access stores date-time values as a Double representing the number of days since Dec 31st 1899, anything else that you see is formatting. If you convert to double you can be sure that you're not hitting any international date format problems (and the SQL string construction is nowhere near as messy)
The ToOADate method converts a .Net datevalue to an OLE Automation Date.
0
 
LVL 27

Expert Comment

by:MikeToole
ID: 20426751
Correction, COM dates, which is what Access stores, are offset from the beginning of Dec 30th 1899, not Dec 31st.
Mike
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

1.0 - Introduction Converting Visual Basic 6.0 (VB6) to Visual Basic 2008+ (VB.NET). If ever there was a subject full of murkiness and bad decisions, it is this one!   The first problem seems to be that people considering this task of converting…
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

930 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now