Principales respuestas
fecha mayor o igual a la fecha ingresada

Pregunta
-
buenas tardes
si alguien me puede orientar por fa
necesito que el usuario ponga una fecha mayor o igual a la fecha guardada en la base datos
pero si ingresa una fecha menor que le muestre un mensaje que diga fecha invalida
como que adema muestra fecha mayor para hacer la comparacion
Dim query As String = "SELECT * FROM Projects WHERE CreatedDate >= @fecha"
Dim cmd As New SqlCommand(query, conn)
cmd.Parameters.AddWithValue("@fecha", txtDate.Text)
Dim drd As SqlDataReader = cmd.ExecuteReader()
Dim da As New SqlDataAdapter(cmd)
If drd.Read() Then
txtDate.Text = CDate(drd("CreateDate"))
MsgBox("vamos bien ")
End Ifme manda un error
ingreso en la caja texto de esta forma la fecha 2015/01/20
dice esto la conversion del tipo de datos nvarchar en datetime produjo un valor fuera del intervalo
Respuestas
-
Prueba cambiando la condición, es sólo que debes darte cuenta cual es el error.
If (DateDiff(DateInterval.Day, Convert.ToDateTime(txtFechaIngresada.Text).Date, Convert.ToDateTime(txtDate.Text).Date) < 0) Then
-----------------------------------------------------------------------------------------------------
Espero haberte ayudado con mi sugerencia, si resolvió tu problema no olvides marcarla como respuesta.
Willams Morales P.
Arequipa - Perú
- Marcado como respuesta djnilo martes, 23 de diciembre de 2014 12:23
Todas las respuestas
-
Hola,
Primero, sí sólo esperas recibir un valor no uses un DataReader usa ExecuteScalar() que devuelve sólo un valor (la primera columna de la primera fila del conjunto de resultados)
Segundo, el error está en la consulta por la misma razón que la ejecutas como texto. Te sugiero que utilices procedimiento almacenados con parámetros INPUT o OUTPUT (según requieras) y evites todos estos problemas
Haces uso de parámetros? Estás mandando una cadena y en ella debes de concatenar los valores, insisto que es una mala práctica pero esto resolverá el problema
Dim query As String = "SELECT * FROM Projects WHERE CreatedDate >= '" & txtDate.Text & "'" Dim cmd As New SqlCommand(query, conn) Dim drd As SqlDataReader = cmd.ExecuteReader() Dim da As New SqlDataAdapter(cmd) If drd.Read() Then txtDate.Text = CDate(drd("CreateDate")) MsgBox("vamos bien ") End If
Finalmente, el formato con el que SQL SERVER interpreta una fecha depende del idioma configurado para el usuario que inicia la sesión. Revisa si el formato yyyy/mm/dd funcionará. Además deberías usar controles de fecha y hora.
-----------------------------------------------------------------------------------------------------
Espero haberte ayudado con mi sugerencia, si resolvió tu problema no olvides marcarla como respuesta.
Willams Morales P.
Arequipa - Perú
- Editado Willams Morales sábado, 20 de diciembre de 2014 19:36
- Propuesto como respuesta Dorian Ferney Rallón Galvis martes, 23 de diciembre de 2014 5:18
-
williams como lo hago con procedmiento almacenado como dices tu para no tener ese error
com el sql para ademas sacar maxima fecha para comparar
Dim query As String = "SELECT * FROM Projects WHERE CreatedDate >= '" & txtDate.Text & "'" Dim cmd As New SqlCommand(query, conn) Dim drd As SqlDataReader = cmd.ExecuteReader() Dim da As New SqlDataAdapter(cmd) If drd.Read() Then txtDate.Text = CDate(drd("CreateDate")) MsgBox("vamos bien ") End If
-
A ver, vamos a ordenar las cosas. Tu necesitas saber cuál es la máxima fecha ingresada y con ee valor harás tu comparación en tu aplicación. Tenemos que crear un procedimiento que te devuelva la máxima fecha y para ello hacemos lo siguiente
CREATE PROCEDURE uspMaxFechaProyecto AS BEGIN SET NOCOUNT ON; SELECT MAX(CreatedDate) FROM Projects; END
Como vez, el procedimiento sólo devolverá la máxima fecha y como es sólo un valor haremos uso de ExecuteScalar.
Dim cmd As New SqlCommand("uspMaxFechaProyecto", conn) txtDate.Text = cmd.ExecuteScalar()
Ahora, con el valor devuelto sabrás si la fecha es mayor o igual.
Para ello puede utilizar la función DateDiff
If (DateDiff(DateInterval.Day, txtFechaIngresada.Text, txtDate.Text) > 0) Then
...
End If
-----------------------------------------------------------------------------------------------------
Espero haberte ayudado con mi sugerencia, si resolvió tu problema no olvides marcarla como respuesta.
Willams Morales P.
Arequipa - Perú- Editado Willams Morales sábado, 20 de diciembre de 2014 21:32
-
Try
conn.Open()
Dim cmd As New SqlCommand("uspMaxFechaProyecto", conn)
txtDate.Text = cmd.ExecuteScalar()
If (DateDiff(DateInterval.Day, txtFechaIngresada.Text, txtDate.Text) > 0) Then
me resalta un error aqui por que pusite otro campo txfechaingrada si solo es un campo txtdate que ingresa el usuario la fecha pero necesito que le diga que si ingresa una fecha menor a la que esta la base datos que le muestre un mesaje fecha invalida
MsgBox("")
End If
drd.Close()
conn.Close()
Catch ex As Exception
'Nos mostrara en un ventana el error'
MsgBox(ex.Message)
End Try -
Lo que te menciona el error es que se está pasando valores que no son de tipo fecha o por lo menos no de manera explicita.
If (DateDiff(DateInterval.Day, Convert.ToDateTime(txtFechaIngresada.Text).Date, Convert.ToDateTime(txtDate.Text).Date) >= 0) Then
'Es una fecha igual o mayor a la máxima fecha almacenada
End If
Lo que intento hacer ahí es que si producto de la condición el valor es menor que cero es porque la nueva fecha a ingresar es anterior a la máxima fecha almacenada en la bd
-----------------------------------------------------------------------------------------------------
Espero haberte ayudado con mi sugerencia, si resolvió tu problema no olvides marcarla como respuesta.
Willams Morales P.
Arequipa - Perú- Editado Willams Morales sábado, 20 de diciembre de 2014 23:00
-
Joseph, porque implementar lógica de negocio en un procedimiento?
La bd sólo debe de servir para contener datos y velar por la integridad de los mismos, los procedimientos no deberían contener lógica que es propia de la aplicación.
- Editado Willams Morales sábado, 20 de diciembre de 2014 23:31
-
-
sigo sin entender como hacer funcionar este procedimento y por que poner otro campo fecha
si lo necesito compara con el ingreso del usuario la fecha el campo txtdate
por fa
ry
conn.Open()
Dim cmd As New SqlCommand("uspMaxFechaProyecto", conn)
txtDate.Text = cmd.ExecuteScalar()
If (DateDiff(DateInterval.Day, Convert.ToDateTime(txtFechaIngresada.Text).Date, Convert.ToDateTime(txtDate.Text).Date) >= 0) Then
MsgBox("esta bien")
Else
MsgBox("la fecha ingresa es menor debe ingresar una fecha valida")
End If
conn.Close()
Catch ex As Exception
'Nos mostrara en un ventana el error'
MsgBox(ex.Message)
End Try -
joseph no logro hacer funcionar tu procedimiento
Protected Sub Button3_Click(sender As Object, e As System.EventArgs) Handles Button3.Click
conn.Open()
Dim cmd As New SqlCommand()
cmd.Connection = conn
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "fechacomparar"
cmd.Parameters.AddWithValue("@fecha", txtDate.Text)
cmd.ExecuteNonQuery()
conn.Close()
Try
Catch ex As Exception
MsgBox(ex.Message)
End Tryend sub
-
buenas tardes
si alguien me puede orientar por fa
necesito que el usuario ponga una fecha mayor o igual a la fecha guardada en la base datos
pero si ingresa una fecha menor que le muestre un mensaje que diga fecha invalida
como que adema muestra fecha mayor para hacer la comparacion
Dim query As String = "SELECT * FROM Projects WHERE CreatedDate >= @fecha"
Dim cmd As New SqlCommand(query, conn)
cmd.Parameters.AddWithValue("@fecha", txtDate.Text)
Dim drd As SqlDataReader = cmd.ExecuteReader()
Dim da As New SqlDataAdapter(cmd)
If drd.Read() Then
txtDate.Text = CDate(drd("CreateDate"))
MsgBox("vamos bien ")
End Ifme manda un error
ingreso en la caja texto de esta forma la fecha 2015/01/20
dice esto la conversion del tipo de datos nvarchar en datetime produjo un valor fuera del intervalo
hola, ibas muy bien. Te recomiendo,uses parámetros como,bien haces aqui. Lo único que te faltaba es que debes convertir,la cadena en un datetime así...
cmd.Parameters.AddWithValue("@fecha", Convert.ToDateTime(txtDate.Text))
ya que el tipo esperado es DateSi se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos
-
luego debería optimizar tu consulta... Si únicamente vas a devolver un único campo nunca hagas un SELECT * FROM...
utiliza con bien te indicaron el ExecuteScalar()con,esto se evita enviar por red datos,innecesarios con la pérdida de rendiemiento que esto provoca
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos
-
-
en este codigo trato que el usuario si ingresa una fecha menor a la guardada en la base datos le muestre un mensaje fecha invalida que le diga que tiene que ingresar una fecha mayor o igual a la guardada en la base datos
por fa
conn.Open()
Try
Dim SQLbuscar As String
SQLbuscar = "SELECT * FROM Projects WHERE CreatedDate >= @fecha"
Dim cmd As New SqlCommand(SQLbuscar, conn)
cmd.CommandType = CommandType.Text
cmd.Parameters.AddWithValue("@fecha", Convert.ToDateTime(txtDate.Text))
Dim drd As SqlDataReader = cmd.ExecuteReader()
Dim da As New SqlDataAdapter(cmd)
If drd.Read() Then
txtProjectName.Text = drd.Item("ProjectName")
MsgBox("vamos bien ")
Else
MsgBox("Debe ingresar una fecha valida")
End If
conn.Close()
Catch ex As Exception
'Nos mostrara en un ventana el error'
MsgBox(ex.Message)
End Try -
-
Lo que te menciona el error es que se está pasando valores que no son de tipo fecha o por lo menos no de manera explicita.
If (DateDiff(DateInterval.Day, Convert.ToDateTime(txtFechaIngresada.Text).Date, Convert.ToDateTime(txtDate.Text).Date) >= 0) Then
'Es una fecha igual o mayor a la máxima fecha almacenada
End If
Lo que intento hacer ahí es que si producto de la condición el valor es menor que cero es porque la nueva fecha a ingresar es anterior a la máxima fecha almacenada en la bd
-----------------------------------------------------------------------------------------------------
Espero haberte ayudado con mi sugerencia, si resolvió tu problema no olvides marcarla como respuesta.
Willams Morales P.
Arequipa - Perú
djnilo,
Que problemas has tenido para completar la solución que te propuse?
-
Williams
no pued0 hacer funcionar tu codigo
If (DateDiff(DateInterval.Day, Convert.ToDateTime(txtFechaIngresada.Text).Date, Convert.ToDateTime(txtDate.Text).Date) >= 0) Then
Try
conn.Open()
Dim cmd As New SqlCommand("uspMaxFechaProyecto", conn)
txtDate.Text = cmd.ExecuteScalar()
If (DateDiff(DateInterval.Day, Convert.ToDateTime(txtFechaIngresada.Text).Date, Convert.ToDateTime(txtDate.Text).Date) >= 0) Then
MsgBox("esta")
Else
MsgBox("la fecha ingresa es menor debe ingresar una fecha valida")
End If
conn.Close()
Catch ex As Exception
'Nos mostrara en un ventana el error'
MsgBox(ex.Message)
End Try -
-
en primer no entiendo esta linea de codigo que pusiste
If (DateDiff(DateInterval.Day, Convert.ToDateTime(txtFechaIngresada.Text).Date, Convert.ToDateTime(txtDate.Text).Date) >= 0) Then
en esta dos cajas le ingreso la fecha menores a la que estan en la base datos ingresa igual y muestra el mensaje estan
y no se porque pusiste esta caja de texto txtfechaingresa
si solo ocupo txtdate
lo otro txtDate.Text = cmd.ExecuteScalar()
no deberia combirtir esta caja en datetime si la convierto me manda un error booleano
ingreso de fecha 20/12/2011 si el usuario ingreso esta fecha menor a la que esta guardada deberi mandar un mensaje fecha invalida
por fa
Try
conn.Open()
Dim cmd As New SqlCommand("uspMaxFechaProyecto", conn)
txtDate.Text = cmd.ExecuteScalar()
If (DateDiff(DateInterval.Day, Convert.ToDateTime(txtFechaIngresada.Text).Date, Convert.ToDateTime(txtDate.Text).Date) >= 0) Then
MsgBox("esta")
Else
MsgBox("la fecha ingresa es menor debe ingresar una fecha valida")
End If
conn.Close() -
lo otro txtDate.Text = cmd.ExecuteScalar()
no deberia combirtir esta caja en datetime si la convierto me manda un error booleano
Debes de convertir a string:
txtDate.Text = Convert.ToString(cmd.ExecuteScalar())
ingreso de fecha 20/12/2011 si el usuario ingreso esta fecha menor a la que esta guardada deberi mandar un mensaje fecha invalida
Donde ingresas la fecha 20/12/2011??? Pongo en DateDiff el control txtfechaingresada.text, asumiendo que tienes un lugar donde ingresas la fecha, en todo caso has el cambio conveniente.
- Editado Willams Morales lunes, 22 de diciembre de 2014 16:23
-
consulta cuando ingreso una fecha que no esta en la base datos ejemplo 20/12/2011 no compara el procedimiento almacenado
se supone que el procedimiento almacenacenado me busca la fecha maxima
correcto si o no ?
yo necesito que sea mayor o igual a la fecha guardada en la base datos
si ingresa otra fecha como esta 20/12/2011 no deberia pasar debe estar mal el if que tengo
20/12/2011
Try
conn.Open()
Dim cmd As New SqlCommand("uspMaxFechaProyecto", conn)
txtDate.Text = Convert.ToString(cmd.ExecuteScalar())
If (DateDiff(DateInterval.Day, Convert.ToDateTime(txtFechaIngresada.Text).Date, Convert.ToDateTime(txtDate.Text).Date) >= 0) Then
MsgBox("esta")
Else
MsgBox("la fecha ingresa es menor debe ingresar una fecha valida")
End If
conn.Close()
Catch ex As Exception
'Nos mostrara en un ventana el error'
MsgBox(ex.Message)
End Try -
Prueba cambiando la condición, es sólo que debes darte cuenta cual es el error.
If (DateDiff(DateInterval.Day, Convert.ToDateTime(txtFechaIngresada.Text).Date, Convert.ToDateTime(txtDate.Text).Date) < 0) Then
-----------------------------------------------------------------------------------------------------
Espero haberte ayudado con mi sugerencia, si resolvió tu problema no olvides marcarla como respuesta.
Willams Morales P.
Arequipa - Perú
- Marcado como respuesta djnilo martes, 23 de diciembre de 2014 12:23
-
Dim query As String = "SELECT COUNT(*) FROM Projects WHERE CreatedDate >= @fecha" cmd.Parameters.AddWithValue("@fecha", Convert.ToDateTime(txtDate.Text) Dim cuenta As Integer = Convert.ToInt32(cmd.ExecuteScalar()) If cuenta > 0 Then txtDate.Text = CDate(drd("CreateDate")) MsgBox("vamos bien ") End If
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos
- Editado Sergio ParraModerator lunes, 22 de diciembre de 2014 21:35
-
como ves simplemente obtenemos la cuenta de registros que cumplen la condición de la fecha y si se obtiene alguna cuenta mayor de 0 entonces actuar en consecuencia.
de todas formas te recomiendo no copiar y pegar codigo "a lo loco". Analiza las respuestas y adapta a tu lógica lo que veas necesario. También debes ser mas explicito cuando dices "me da error". Explica mas detalladamente lo que te ocurre o muestra algún mensaje que obtengas.
un saludo
Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos
-
-
tu codigo no puede hacer funcionar
Sergio Parra
onn.Open()
Try
Dim query As String = "SELECT COUNT(*) FROM Projects WHERE CreatedDate >= @fecha"
Dim cmd As New SqlCommand(query, conn)
cmd.CommandType = CommandType.Text
cmd.Parameters.AddWithValue("@fecha", Convert.ToDateTime(txtDate.Text))
Dim cuenta As Integer = Convert.ToInt32(cmd.ExecuteScalar())
If cuenta > 0 Then
' txtProjectName.Text = drd.Item("ProjectName")
MsgBox("vamos bien ")
Else
MsgBox("Debe ingresar una fecha valida")
End If
conn.Close()
Catch ex As Exception
'Nos mostrara en un ventana el error'
MsgBox(ex.Message)
End Try
End Sub