Foros del Web » Programación para mayores de 30 ;) » .NET »

Error al ejecutar consulta sobre BD

Estas en el tema de Error al ejecutar consulta sobre BD en el foro de .NET en Foros del Web. Estoy realizando una aplicación en VB.NET que ejecuta consultas sobre una BD Access. Primero realizo una consulta mediante un DataAdapter, y a continuación intento realizar ...
  #1 (permalink)  
Antiguo 01/08/2005, 02:39
 
Fecha de Ingreso: julio-2005
Mensajes: 103
Antigüedad: 18 años, 9 meses
Puntos: 0
Exclamación Error al ejecutar consulta sobre BD

Estoy realizando una aplicación en VB.NET que ejecuta consultas sobre una BD Access.
Primero realizo una consulta mediante un DataAdapter, y a continuación intento realizar la siguiente consulta:


...
Dim fech As Date
fech = New Date(2004, 7, 26)
Dim lin As Integer = 3
Dim estado As String="Funcionando"
Dim st As String
st = "select hora from Maquina where Fecha=fech and Linea='" & lin & "' and Estado<> '" & estado & " ' order by hour asc"
comando = New OleDbCommand(st, objSQLConnect)
lee = comando.ExecuteReader()
lee.Read()
...
lee.Close()


Pero no consigo realizarla, me da el siguiente error:

No se han especificado valores para algunos de los parámetros requeridos. at System.Data.OleDb.OleDbCommand.ExecuteCommandTextE rrorHandling(Int32 hr) at System.Data.OleDb.OleDbCommand.ExecuteCommandTextF orSingleResult(tagDBPARAMS dbParams, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommandText( Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommand(Comm andBehavior behavior, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteReaderIntern al(CommandBehavior behavior, String method) at System.Data.OleDb.OleDbCommand.ExecuteReader(Comma ndBehavior behavior) at System.Data.OleDb.OleDbCommand.ExecuteReader()

Alguien me puede explicar a que se debe?? No consigo detectar el error!!
  #2 (permalink)  
Antiguo 01/08/2005, 04:06
 
Fecha de Ingreso: enero-2005
Ubicación: Benifaió (Valencia)
Mensajes: 319
Antigüedad: 19 años, 3 meses
Puntos: 0
Creo que es porque en la consulta, las fechas las tienes que poner entre ', quedaria asi:

Código:
st = "select hora from Maquina where Fecha=' " & fech & " ' and Linea=' " & lin & " ' and Estado<> '" & estado & " ' order by hour asc"
No lo he probado, pero si no recuerdo mal se hacia asi.
Ya me dices algo.
  #3 (permalink)  
Antiguo 01/08/2005, 04:07
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
st = "select hora from Maquina where Fecha=fech and Linea='" & lin & "' and Estado<> '" & estado & " ' order by hour asc"

Creo que el tema lo tienes en "Fecha=fech"... Que es fech? Si es una variable con la fecha, deberías hacer igual que hiciste con "Linea" y con "Estado", cerrando la exresion, concatenando la variable y volviendo a abrir la expresion.
__________________
..:: moNTeZIon ::..
  #4 (permalink)  
Antiguo 01/08/2005, 04:17
 
Fecha de Ingreso: julio-2005
Mensajes: 103
Antigüedad: 18 años, 9 meses
Puntos: 0
Ya he puesto lo que me habeis comentado de la fecha, pero me sigue dando ERROR!!!
La línea exacta en la que me lo marca es en la de:
lee = comando.ExecuteReader()

No entiendo por qué???
  #5 (permalink)  
Antiguo 01/08/2005, 04:24
 
Fecha de Ingreso: enero-2005
Ubicación: Benifaió (Valencia)
Mensajes: 319
Antigüedad: 19 años, 3 meses
Puntos: 0
Y esta variable en ingles???
fech = New Date(2004, 7, 26)

Podria ser el problema, o tambien el problema puede ser una mala construccion de la cadena de conexion. Compruebalo.
  #6 (permalink)  
Antiguo 01/08/2005, 06:45
 
Fecha de Ingreso: julio-2005
Mensajes: 103
Antigüedad: 18 años, 9 meses
Puntos: 0
Ya he probado con todo eso, pero sigue apareciendo el error!!!
Me podrías escribir código con alguna consulta SQL para poder averiguar qué es lo que estoy haciendo mal??

Gracias por adelantado
  #7 (permalink)  
Antiguo 01/08/2005, 07:29
Avatar de erick_arcini  
Fecha de Ingreso: julio-2005
Ubicación: Jaltenco / DF
Mensajes: 1.723
Antigüedad: 18 años, 9 meses
Puntos: 50
haber, haber

Puede haber de dos panes

1. - recuerdas como detallaste el campo fecha en tu base de datos en access
2. - como considera VB.NET las fechas y de ser asi, tendrias que modificar la cultura de tu programa...

y eso de la consulta en SQL lo puedes hacer sobre el mismo access y como??, bueno:

a) vete al area de consultas y le das en nueva consulta
B) en una de las tool bars hay un boton que dice SQL, presionas ese y ahi puedes generar la consulta que hiciste en VB.NET y si no funciona entonces lago esta mal en tu T-SQL, y si esta bien entonces es tu visual, ya no lo compres pirata, jajajaja, ah verdad (¬_¬)

  #8 (permalink)  
Antiguo 01/08/2005, 08:34
 
Fecha de Ingreso: julio-2005
Mensajes: 103
Antigüedad: 18 años, 9 meses
Puntos: 0
Me parece que lo que ocurre es que VB y Access tratan de diferente manera los tipos de datos Fecha y Hora.
Me podrías explicar como es eso de cambiar de cultura mi programa?? A cuál habría que cambiarlo??

Gracias por adelantado
  #9 (permalink)  
Antiguo 01/08/2005, 09:34
 
Fecha de Ingreso: enero-2005
Ubicación: Benifaió (Valencia)
Mensajes: 319
Antigüedad: 19 años, 3 meses
Puntos: 0
Se refiere, creo, a que si tienes el SO en castellano y la Base de datos en castellano, que pongas la fecha a introducir tambien en castellano !!, que la estas poniendo en guiri xD
  #10 (permalink)  
Antiguo 02/08/2005, 01:24
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Tu sentencia SQL estaba mal, arriba del todo, vuelve a ponerla si dices que la cambiaste, así la miramos y vemos que puede ocurrir.

Saludos.
__________________
..:: moNTeZIon ::..
  #11 (permalink)  
Antiguo 02/08/2005, 02:14
 
Fecha de Ingreso: julio-2005
Mensajes: 103
Antigüedad: 18 años, 9 meses
Puntos: 0
Esta es la nueva consulta:

...
Dim fetxa As Date
fetxa = New Date(2004, 7, 26)
Dim estado As String="Funcionando"
Dim st As String

st = "select Hora from Maquina where Fecha= ' " & fetxa & " ' and estado<> '" & estado & "' order by Hora asc"

comando = New OleDbCommand(st, objSQLConnect)
lee = comando.ExecuteReader()
lee.Read()
...
lee.Close()


El ERROR que aparece ahora es el siguiente:

No coinciden los tipos de datos en la expresión de criterios. at System.Data.OleDb.OleDbCommand.ExecuteCommandTextE rrorHandling(Int32 hr) at System.Data.OleDb.OleDbCommand.ExecuteCommandTextF orSingleResult(tagDBPARAMS dbParams, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommandText( Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommand(Comm andBehavior behavior, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteReaderIntern al(CommandBehavior behavior, String method) at System.Data.OleDb.OleDbCommand.ExecuteReader(Comma ndBehavior behavior) at System.Data.OleDb.OleDbCommand.ExecuteReader()


Lo que ocurre, creo, es que el tipo de datos Date de Visual Basic .NET y el de Access no son compatibles, porque he probado a realizar una consulta que no necesita la fecha e iba bien!! Hay que definir algún tipo de capa de interoperabilidad para que funcione??

Gracias por tu ayuda
  #12 (permalink)  
Antiguo 02/08/2005, 02:19
 
Fecha de Ingreso: enero-2005
Ubicación: Benifaió (Valencia)
Mensajes: 319
Antigüedad: 19 años, 3 meses
Puntos: 0
Esta intentando insertar esta fecha: fetxa = New Date(2004, 7, 26)
Prueba con: fetxa = New Date(26/ 7 / 04)
  #13 (permalink)  
Antiguo 02/08/2005, 02:23
 
Fecha de Ingreso: julio-2005
Mensajes: 103
Antigüedad: 18 años, 9 meses
Puntos: 0
Ya lo he probado, y sigue dando el mismo error.

Lo raro es que si ejecuto esta otra consulta:

st = "insert into Maquina values ('3','" & fetxa & " ','11:00:00','Probando','9','0')"
No me da ningún error, y la nueva tupla se inserta en la BD.

Es un poco raro, no??
  #14 (permalink)  
Antiguo 02/08/2005, 02:29
 
Fecha de Ingreso: enero-2005
Ubicación: Benifaió (Valencia)
Mensajes: 319
Antigüedad: 19 años, 3 meses
Puntos: 0
Los campos Fecha y Hora, son campos separados, o utilizas el mismo????

Asi es como yo inserto:

Código:
            Dim SqlCommando As New SqlCommand("INSERT INTO tareas(id, nombre, descripcion, fechainicio, fechafin, finalizado, usuario) VALUES(' " & txtCodigo.Text & " ',' " & txtTitulo.Text & " ',' " & txtDescripcion.Text & " ',' " & dtpFechaIni.Value & " ',' " & dtpFechaFin.Value & " ',' " & check & " ',' " & usu & "')", conection)
            SqlCommando.ExecuteNonQuery()
            MsgBox("Inserción realizada con éxito")
            refrescar = 0
            conection.Close()
Y asi leeo:
Código:
        ds = New Data.DataSet
        Ssql = "SELECT mensajes.id AS Codigo, titulo AS Titulo, fecha AS Fecha FROM Mensajes WHERE usuarioorigen=' " & codigo & " '"
        da = New Data.SqlClient.SqlDataAdapter(Ssql, conection)
        da.Fill(ds, "mensajes")
        dtaMensajesEnviados.DataSource = ds.Tables("mensajes")
  #15 (permalink)  
Antiguo 02/08/2005, 03:08
 
Fecha de Ingreso: julio-2005
Mensajes: 103
Antigüedad: 18 años, 9 meses
Puntos: 0
Lo he intentado con el OleDbDataAdapter, de la siguiente manera, pero me sigue dando el mismo error!!

Código:
Dim adaptador As OleDbDataAdapter
Dim datos As New DataSet("Resultado")
adaptador = New OleDbDataAdapter("select Hora from Maquina where Fecha>= '" & fetxa & " ' and Hora>' " & hour & "' and Estado<>'Averia' order by Hora asc", objSQLConnect)
adaptador.Fill(datos, "Datos")

El error está en lo de la fecha. Me puedes hacer un favor?? En tu consulta puedes poner en la cláusula "Where" que sea igual a una fecha?? Es simplemente para saber si es problema de mi SW o qué, porque me estoy volviendo loca con este tema!!!

Muchas gracias
  #16 (permalink)  
Antiguo 02/08/2005, 03:12
 
Fecha de Ingreso: enero-2005
Ubicación: Benifaió (Valencia)
Mensajes: 319
Antigüedad: 19 años, 3 meses
Puntos: 0
A mi me funciona bien, lo he hecho asi:

Código:
SELECT * FROM mensajes INNER JOIN usuarios ON usuarios.id=mensajes.usuarioorigen 
WHERE fecha>='02/08/05'
Si tienes todas las fechas en castellano, no deberis de tener problemas.

Yo lo que hago siempre para crear las consultas es ir al Analizador de Consultas (en SQLServer), o creo la consulta en Access, cuando funciona la paso a VB y le cambio los parametros
  #17 (permalink)  
Antiguo 02/08/2005, 03:24
 
Fecha de Ingreso: julio-2005
Mensajes: 103
Antigüedad: 18 años, 9 meses
Puntos: 0
He realizado la consulta en Access y me va bien. Pero luego la pongo en VB con una fecha concreta, esto es, tal y como tu la pones y no me funciona. El problema podría estar en que estoy utilizando Access '97??

No se me ocurre ningún otro motivo, porque si no incluyo la fecha en la cláusula Where me funciona bien!!

Muchas gracias
  #18 (permalink)  
Antiguo 02/08/2005, 03:27
 
Fecha de Ingreso: enero-2005
Ubicación: Benifaió (Valencia)
Mensajes: 319
Antigüedad: 19 años, 3 meses
Puntos: 0
Poder por poder podria xD

Prueba con Access 2000 haber si te funciona mejor.
  #19 (permalink)  
Antiguo 02/08/2005, 03:37
 
Fecha de Ingreso: julio-2005
Mensajes: 103
Antigüedad: 18 años, 9 meses
Puntos: 0
Ya he instalado Access 2000 y sigue igual. La fecha no me la reconoce como tal!!!

En la BD la fecha la tienes definida como Fecha/Hora, no??

Y desde VB el objeto que contiene la fecha es de tipo Date,no??

No sé que hacer!!!

Última edición por oriopitufa; 02/08/2005 a las 03:42
  #20 (permalink)  
Antiguo 02/08/2005, 03:46
 
Fecha de Ingreso: enero-2005
Ubicación: Benifaió (Valencia)
Mensajes: 319
Antigüedad: 19 años, 3 meses
Puntos: 0
Esta es la consulta que me crea Access con su gestor de consultas automaticamente

Código:
SELECT Tabla1.fecha
FROM Tabla1
WHERE (((Tabla1.fecha)=#2/18/1979#));
Como podras ver si que utiliza los # asi que en VB contra Access deberia quedar algo asi:
Código:
SELECT Tabla1.fecha
FROM Tabla1
WHERE (((Tabla1.fecha)=#' " & fecha & " '#));
Y tiene que funcionar por cocos.
  #21 (permalink)  
Antiguo 02/08/2005, 03:50
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Muestrate por pantalla el valor de esa variable a ver que hay en ella realmente en el momento de insertarla. Y también checa el formato en que estan las fechas en la BD...

Si no lo consigues, muestranos esos dos datos a ver si se nos ocurre algo...

Un saludo.
__________________
..:: moNTeZIon ::..
  #22 (permalink)  
Antiguo 02/08/2005, 04:22
 
Fecha de Ingreso: julio-2005
Mensajes: 103
Antigüedad: 18 años, 9 meses
Puntos: 0
He probado con lo que me has dicho, fredy666, pero sigue sin funcionar!!

Lo que le paso en el parámetro fecha de la cláusula Where es lo siguiente:
Código:
11/01/2001
y lo que tengo en la BD es esto:
Código:
11/01/2001
Si son iguales, porque no funciona??
He probado a pasarle la fecha a la cláusula con un tipo de datos Date, y también con String, pero nada, sigue igual!!!
  #23 (permalink)  
Antiguo 02/08/2005, 04:35
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Bueno, por lo visto los datos están formateados correctamente. Hace un par de años me encontré con el problema de las fechas en access. Lo solucione utilizando la funcion de Access "CDate", de esta forma:

SELECT Nombre, Apellidos WHERE CDate(FechaNac)>CDate('" & varFechaTexto & "')

Haz pruebas con CDate a ver si te funciona. Importante que veas que la funcion es de Access, ya que para VB también existe. Debes meter el CDate formando parte de la consulta SQL...

Suerte!
__________________
..:: moNTeZIon ::..
  #24 (permalink)  
Antiguo 02/08/2005, 04:40
 
Fecha de Ingreso: julio-2005
Mensajes: 103
Antigüedad: 18 años, 9 meses
Puntos: 0
De acuerdo

Hola amigos
por fin lo consegui!!! O eso creo al menos!!!

Montezion no he probado lo último que me has comentado, ahora miraré y te digo si va bien. Lo he conseguido solucionar por el camino que me ha dicho fredy666. Lo he conseguido de la siguiente forma:
Código:
Dim fecha As String
...
'En fecha tengo la "fecha" que quiero utilizar
select Fecha from Maquina where Fecha>= # " & fetxa & " #
Ahora por lo menos no me da error al ejecutarlo!!

Muchísimas gracias amigos, os estaré eternamente agradecida
  #25 (permalink)  
Antiguo 02/08/2005, 04:47
 
Fecha de Ingreso: enero-2005
Ubicación: Benifaió (Valencia)
Mensajes: 319
Antigüedad: 19 años, 3 meses
Puntos: 0
De nada xD

Siempre viene bien recordar un poco de Access :p
  #26 (permalink)  
Antiguo 03/08/2005, 04:25
 
Fecha de Ingreso: julio-2005
Mensajes: 103
Antigüedad: 18 años, 9 meses
Puntos: 0
Hola amigos,
aqui estoy una vez más. Simplemente quería comentar que la solución que había dado no funciona bien, ya que al poner en la consulta SQL una comparación de fechas no obtenia el resultado correcto. He utilizado el CDate que comentó Montezion y funciona a la perfección!!!



Muchas gracias por vuestra ayuda!!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:01.