Problema con query

A ver si puedes echarme una mano porque he topado con un problema al que no consigo darle solución.
Estoy desarrollando para mi empresa un programa en Visual Basic-Access 2003 para gestionar el stock del almacén.
En una parte del programa he desarrollado un pequeño generador de consultas en el que básicamente se va construyendo una cadena que no es otra cosa que una SELECT.
Las búsquedas funcionan a la perfección, excepto cuando entran en juego datos de tipo fecha.
En la cadena SQL las fechas las paso con un # delante y detrás. Lo más curioso es que únicamente me encuentra registros en una fecha determinada cuyo día vaya del 10 al 31, es decir, todos los registros cuya fecha de compra (o venta según sea el caso) en los que el número del día sea 01, 02, 03, 04, 05, 06, 07, 08 o 09 "no existen", aunque en realidad esas entradas sí que están almacenadas en la tabla.
Te pego el código que tengo puesto, por si pudieras echarle un vistazo y detectas alguna cosa incorrecta.
    Dim strsql As String
    Dim dbquery As Database
    Dim rsquery As Recordset
    strsql = "SELECT * FROM DCOMPRA WHERE FCompra = #05/04/2010#"
    Set dbquery = CurrentDb
    Set rsquery = dbquery.OpenRecordset(strsql, dbOpenDynaset)
El campo FCompra es de tipo Date y aunque en la tabla DCompra tengo varias entradas cuya fecha de compra es 05/04/2010, la consulta no devuelve resultados.

1 respuesta

Respuesta
1
MMMM tienes todo bien lo único comprueba en la configuración regional del equipo tengas el formato dd/mm/aaaa.
Ya había comprobado la configuración regional y el formato de fecha es dd/mm/aaaa.
He probado a hacer un nuevo formulario, con una BD nueva que sólo tiene una tabla con dos campos.
He reescrito el código para hacer una búsqueda por nombre y fecha, con similares resultados... los registros en cuyas fechas el día está entre el 01 y el 09 no aparecen como resultado de una búsqueda, y el resto de registros se muestran en un cuadro de lista perfectamente.
¿Se te ocurre alguna otra cosa que pueda estar fallando?, ¿O una alternativa para salir de este agujero?.
Muchas gracias. Un saludo.
Prueba a poner la sentencia de este modo sin almohadillas(#):
strsql = "SELECT * FROM DCOMPRA WHERE FCompra = 05/04/2010"
Ya me contarás...
Uffff... pues así ni siquiera encuentra los registros que antes sí que encontraba...
Recuerdo que cuando empecé con el programa, las fechas las guardaba como texto, precisamente para evitar problemas a la hora de manejar los registros y tras detectar algún fallo en las búsquedas de registros me decidí a cambiar el diseño de las tablas y definirlo como Date.
No he tenido ningún problema en otras partes del programa, en las que hago correctamente búsquedas con diferentes criterios, incluidas las fechas, pero en este caso en concreto no consigo que funcione.
Mi idea es que el usuario vaya creando su consulta, al tiempo que genero una sentencia SQL en un textbox, que luego paso como argumento para crear una consulta en tiempo de ejecución, sin basarme en una consulta previa (que es lo que tengo hecho en otras partes del programa donde el usuario introduce los datos y éstos los paso como parámetros a la consulta predefinida).
¿Se te ocurre alguna otra alternativa para crear una consulta durante la ejecución del código?.
Gracias de nuevo por tu ayuda.
Mmmmm
Prueba a hacer una prueba (a mi alguna vez me ha pasado). Create una rutinilla que convierta todos las fechas de texto a fecha con los formatos deseados. Por experiencia te cuento que casi seguro que las fechas que van del 01 al 09 no tienen bien el carácter 0.
Ya me contarás...
¿Te refieres a hacer algo así?.
He definido la variable 'fec' como tipo Date. Capturo el valor de la fecha cargado en el textbox, le doy formato de fecha corta y lo añado a la cadena con la que crearé la consulta... aunque ahora que lo pienso, si lo añado a la cadena, la fecha seguirá siendo tipo texto al pasarlo dentro de strsql, ¿no?. Qué follón!
    fec = Format(Fecha.Text, "short date")
    strsql = "SELECT * FROM TABLA WHERE NOMBRE = '" & nom & "' AND FECHA = #" & fec & "#"
Así tampoco funciona, no me devuelve registros cuyo día comience por 0...
Estoy probando a hacer otra cosa que puede que me funcione, aunque todavía tengo que pulirla. En cuanto lo tenga hecho te cuento.
Gracias por la pronta respuesta.
Ya me dirás...
Hola de nuevo.
He hecho una cosa que al menos me ha ayudado a determinar cuál es el problema.
El botón que estoy creando lanza un informe en función de la consulta STRSQL que el usuario define, ¿no?.
Pues bien, antes de lanzar el informe, he metido una sentencia para que cree una consulta con las mismas condiciones que le paso al docmd. Openreport como parámetro. Al finalizar el proceso de lanzar el informe (que sigue fallando), la consulta sigue hecha y si se abre en vista de diseño se pueden ver los valores que se han pasado.
He comprobado que si la fecha introducida es por ejemplo "22/03/2010" la pasa correctamente. Sin embargo, cuando le paso "05/04/2010", a la consulta le llega "04/05/2010", es decir, por algún motivo que no llego a entender, cuando el día es inferior a 10, invierte el orden del día y el mes, pero sólo en este caso.
He creado puntos de interrupción en el código para analizar los valores que lleva la cadena strsql cuando se genera la consulta o se lanza el informe en caso de pasarle un 05/04/2010, y el orden es correcto.
Está claro que al generar la consulta a raíz de la sentencia SQL, ¿el formato del campo fecha lo establece a mm/dd/aaaa, pero hay alguna forma de cambiar esto en tiempo de ejecución?
Aunque nos cueste, te aseguro que lo apañamos...
Mira en el sql server el idioma y el tipo de caracteres que maneja. ¿El sql lo tienes en español...? Puede que vayan los tiros por ahí...
Ya me contaras...
Mmmm, ¿cómo puedo saber el idioma y el juego de caracteres que maneja el SQL Server?.
He probado a cambiar en la configuración regional y de idioma el formato de la fecha corta a MM/dd/aaaa y la consulta funciona a la perfección... así que me parece que los tiros pueden ir por donde apuntas.
Gracias por tu apoyo... ojala lo consigamos, porque me trae por la calle de la amargura.
MMMM en el SQL Manager, donde configuras el nombre de servidor, modo de acceso, etc, hay un apartado donde seleccionar el idioma y los juegos de caracteres...
Ok, efectivamente tengo un SQL Server instalado en mi equipo, pero mi pregunta es, si yo estoy haciendo mi programa en VB-Access 2003, ¿puede afectar la instalación del SQL Server a su funcionamiento?.
No obstante, te paso los datos que me pides, aunque no encuentro el tema del idioma y juego de caracteres que me comentas.
Tengo instalado el SQL Server 2000. La versión es en castellano, pero en las propiedades del SQL Server en el apartado idioma pone Inglés. La intercalación del servidor es Modern_Spanish_CI_AS.
¿Ayudaría en algo si lo desinstalo?
¿El programa de VB accede al servidor sql para algo?
De todos modos, pon el idioma del sql server en castellano.
¿Tenemos novedades?
Hola... debes estar harto de mí.
No, el programa lo estoy haciendo directamente en Access y las tablas que ataca están íntegramente en él. El SQL ni lo huele.
He probado a cambiar el idioma al castellano y cuando vuelvo a entrar en las propiedades del SQL está nuevamente en inglés.
Me ha cansado y como prácticamente no lo uso, lo he desinstalado. Reiniciaré el equipo antes de marcharme a comer, porque lo he vuelto a probar y sigue haciendo lo mismo.
Gracias de nuevo.
A ver si se me ocurre algo más...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas