none
Comparar fechas

    Pregunta

  • Hola,

    Lo que quiero que haga es que busque una la fecha en la tabla y si encuentra una igual a la fecha de sistema deshabilite el botón, esto es lo que tengo hasta ahora.

    Me falta los objetos a comparar en la funcion If

       Try
                Using cn As New SqlConnection("Data Source=MARTIN-PC;Initial Catalog=BASEDATOSCOMERCIO;Integrated Security=true")
    
    
                    Dim query = "Select from CierreCaja where fecha = @fecha"
    
                    Dim cmd As New SqlCommand(query, cn)
    
                    cn.Open()
                    
                    If  = fecha.Date Then
                        CerrarCajaToolStripMenuItem.Enabled = False
                    End If
    
                End Using
            Catch ex As Exception
                MessageBox.Show("Se produjo un error " & ex.Message)
            End Try

    Saludos


    domingo, 20 de noviembre de 2016 18:01

Respuestas

  • Pedro9089,

    Si comparas contra la fecha actual puedes obviar el parámetro y comparar contra la función GETDATE(). Podrías hacer algo como lo siguiente:

    Try
                Using cn As New SqlConnection("Data Source=...")
    
                    Dim query = "SELECT COUNT(*) FROM CierreCaja WHERE fecha = @fecha"
    
                    Dim cmd As New SqlCommand(query, cn)
                    cmd.Parameters.AddWithValue("@fecha", fecha.Date)
    
                    cn.Open()
    
                    CerrarCajaToolStripMenuItem.Enabled = cmd.ExecuteNonQuery = 0
                End Using
            Catch ex As Exception
                MessageBox.Show("Se produjo un error " & ex.Message)
            End Try


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    domingo, 20 de noviembre de 2016 18:10
  • Cierto! error al escribir, gracias Joel por la observación.

    Pedro, además de lo comentado es de esperar que la columna 'fecha' sea de tipo date, si es un tipo que contiene el tiempo (datetime, smalldatetime, etc) será poco probable que la expresión resulte verdadera (por la diferencia en el tiempo), de ser así una opción es "castear" la columna 'fecha' a un tipo date.

    Dim query = "SELECT COUNT(*) FROM CierreCaja WHERE CONVERT(date, fecha) = @fecha"


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Federico32113 domingo, 20 de noviembre de 2016 18:44
    domingo, 20 de noviembre de 2016 18:33
  • Hola Pedro9089,

    La respuesta de Willams es correcta, solo un pequeño detalle, tendrías que usar la función ExecuteScalar() en vez del ExecuteNonQuery.

    CerrarCajaToolStripMenuItem.Enabled = CInt(cmd.ExecuteScalar()) = 0

    Dónde : Si no existe el Enabled será True, y si existe será False.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Propuesto como respuesta Willams Morales domingo, 20 de noviembre de 2016 18:33
    • Marcado como respuesta Federico32113 domingo, 20 de noviembre de 2016 18:44
    domingo, 20 de noviembre de 2016 18:19

Todas las respuestas

  • Pedro9089,

    Si comparas contra la fecha actual puedes obviar el parámetro y comparar contra la función GETDATE(). Podrías hacer algo como lo siguiente:

    Try
                Using cn As New SqlConnection("Data Source=...")
    
                    Dim query = "SELECT COUNT(*) FROM CierreCaja WHERE fecha = @fecha"
    
                    Dim cmd As New SqlCommand(query, cn)
                    cmd.Parameters.AddWithValue("@fecha", fecha.Date)
    
                    cn.Open()
    
                    CerrarCajaToolStripMenuItem.Enabled = cmd.ExecuteNonQuery = 0
                End Using
            Catch ex As Exception
                MessageBox.Show("Se produjo un error " & ex.Message)
            End Try


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    domingo, 20 de noviembre de 2016 18:10
  • Hola Pedro9089,

    La respuesta de Willams es correcta, solo un pequeño detalle, tendrías que usar la función ExecuteScalar() en vez del ExecuteNonQuery.

    CerrarCajaToolStripMenuItem.Enabled = CInt(cmd.ExecuteScalar()) = 0

    Dónde : Si no existe el Enabled será True, y si existe será False.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Propuesto como respuesta Willams Morales domingo, 20 de noviembre de 2016 18:33
    • Marcado como respuesta Federico32113 domingo, 20 de noviembre de 2016 18:44
    domingo, 20 de noviembre de 2016 18:19
  • Cierto! error al escribir, gracias Joel por la observación.

    Pedro, además de lo comentado es de esperar que la columna 'fecha' sea de tipo date, si es un tipo que contiene el tiempo (datetime, smalldatetime, etc) será poco probable que la expresión resulte verdadera (por la diferencia en el tiempo), de ser así una opción es "castear" la columna 'fecha' a un tipo date.

    Dim query = "SELECT COUNT(*) FROM CierreCaja WHERE CONVERT(date, fecha) = @fecha"


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Federico32113 domingo, 20 de noviembre de 2016 18:44
    domingo, 20 de noviembre de 2016 18:33