Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 248
  • Last Modified:

How to compare values from database with a current date

Hi,

I have a form with a button that when the user clicks on a button it should check - if a report already exist or not.
If it exists it should show a message telling the user that report already exist or display another message telling the user to enter data for a new report and then inserting default values like 0.

Could someone please looks at my code because I am not sure what I am doing wrong.
 
Thanks!

Public Sub btnInsert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInsert.Click

        Dim strConnString As String = "server=***;database=***;uid=***;pwd=***"
        Dim objConn As New SqlConnection(strConnString)
        Dim strInsert As New SqlCommand
        Dim TodayDate As DateTime = DateTime.Now

        Dim strSQL As String
        strSQL = "SELECT * FROM StudentsTable WHERE ReportDate >= DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)"

        Dim cmd As New SqlCommand(strSQL, objConn)
        Dim reader As SqlDataReader
        objConn.Open()
        reader = cmd.ExecuteReader

        While (reader.Read())
            If (String.Compare(reader.Itme("ReportDate").ToString(), TodayDate)  = 0) Then  


                MessageBox("Report for this date already exists." & _
                Microsoft.VisualBasic.vbNewLine)

                'objConn.Close()

            ElseIf (String.Compare(reader.Item("ReportDate").ToString, TodayDate) < 0) Then

                strInsert.CommandText = "Insert StudentsTable(ReportName, ReportDate, ClassA, ClassB, ClassC, CFlag) " & _
                 "Values('Report_'+REPLACE(CONVERT(varchar(10),GETDATE(),101),'/',''),GETDATE(),0,0,0,0)"

                strInsert.Connection = objConn
             
                objConn.Open()
           
                strInsert.ExecuteNonQuery()

                MessageBox("Enter data for a new report." & _
                Microsoft.VisualBasic.vbNewLine)

            End If
          End While
   
        objConn.Close()

    End Sub
0
avi4
Asked:
avi4
1 Solution
 
williamcampbellCommented:
If (String.Compare(reader.Itme("ReportDate").ToString(), TodayDate)  = 0) Then  


Typo  ''' Itme "" 
0
 
Edwin_CCommented:
It seems to me that the StudentsTable contains only one record (or none) record for each ReportDate.  If that is true, your loop may be doing the job right.

Because you first selected all records with ReportDate >= current date, i.e. records with current ReportDate and future ReportDate

In the first If, you checked if the ReportDate equals the current date.  If it does, you pop a message but the loop continues.  That means any records with a future ReportDate will get executed in the ElseIf part and you insert a new record for each row with a future ReportDate.

Perphaps you can try a better way of doing this.

        Dim strSQL As String
        strSQL = String.Format("SELECT ReportName FROM StudentsTable WHERE ReportDate = '{0:dd MMM yyyy}'", DateTime.Today)

        Dim cmd As New System.Data.SqlClient.SqlCommand(strSQL, objConn)
        objConn.Open()
        Dim obj As Object = cmd.ExecuteScalar()
         If (obj = vbNull) Then
            'insert new report here
        Else
            'report alreay exist, show your message
        End If
        objConn.Close()

Hope that helps
Edwin

0
 
avi4Author Commented:
Thanks!
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now