Foros ZackYFileS

Foros ZackYFileS (http://foros.zackyfiles.com/index.php)
-   PROGRAMACIÓN Lenguajes: Visual Basic, C++, etc (http://foros.zackyfiles.com/forumdisplay.php?f=370)
-   -   Consulta sobre Sql y Acces desde App. vb6 (http://foros.zackyfiles.com/showthread.php?t=596443)

kadosh 17/01/2009 14:50

Consulta sobre Sql y Acces desde App. vb6
 
Hola a todos, tengo un problemita, estoy terminando una aplicacion y me quede barado. esta hecha en vb6 y usa un DB access . esta tiene una tabla con un campo fecha/hora y ahi guardo con normalidad datos desde la app.
ahora , estoy haciendo un reporte y cuando hago las consultas se me planta y me da error de formatos. si la hago con la misma base de datos, hace la consulta, si la copio a la instrucccion SQL de la misma base y pego en la aplicacion , anda. el problema es que no necesito una a "piñon fijo " sino yo pasar los parametros del formulario de la aplicacion. si se la pongo como string no funciona, si como time, tampoco, ademas, no se si hay algun problema con el formato de la tabla , por que la forma de pasarle los datos para que funcione, ( no se ve asi en la base de datos, solo muestra la hora ) es acompañada de la fecha... les muestro..

SELECT RESERVAS.ID_RESERVA, RESERVAS.A_NOMBRE, RESERVAS.ID_MESA, RESERVAS.FECHA_r, RESERVAS.HORA_r, RESERVAS.CANTIDAD_DE_CUB, RESERVAS.CANCELADA, RESERVAS.OCUPADA
FROM RESERVAS
WHERE (((RESERVAS.ID_MESA)=2) AND ((RESERVAS.FECHA_r)=#1/16/2009#) AND ((RESERVAS.HORA_r) Between #12/30/1899 16:0:0# And #12/30/1899 19:0:0#) AND ((RESERVAS.CANCELADA)=False));

la verdad es que no recuerdo haber tenido un problema asi para hacer una consulta, ni nada especial con horas, aunque no es muy comun en mis palicaciones, pero tampoco he tenido ningun problema...
si me dan una mano, se agradecera...
adrian

aspi 17/01/2009 20:31

No tienes por qué tener problemas si generas tu la consulta de esta manera:

"SELECT RESERVAS.ID_RESERVA, RESERVAS.A_NOMBRE, RESERVAS.ID_MESA, RESERVAS.FECHA_r, RESERVAS.HORA_r, RESERVAS.CANTIDAD_DE_CUB, RESERVAS.CANCELADA, RESERVAS.OCUPADA
FROM RESERVAS
WHERE (((RESERVAS.ID_MESA)=2) AND ((RESERVAS.FECHA_r)=#" & format(mi_fecha,"dd/mm/yyyy") & "#) AND ((RESERVAS.HORA_r) Between #" & format(mi_fecha_2,"dd/mm/yyyy") & " " & format(hora_1,"00:00:00") & "# And #" & format(mi:fecha_3,"dd/mm/yyyy") & " " & format(hora_2,"00:00:00") & "#) AND ((RESERVAS.CANCELADA)=False));"

Simplemente generas las cadenas adecuadas (en el formato apropiado).

Un saludo.

kezuziyo 17/01/2009 21:49

aspi yo nunca he trabajado con horas y no me apetece hacer pruebas hoy, pero en lo que pones de fechas esta mal, en una instruccion SQL tiene que poner las fechas en formato mm-dd-yyyy

kadosh 18/01/2009 11:52

Sql
 
Gracias por los aportes... , si le pase los formatos asi tambien, no la consulta tal cual la pones pero en los formatos si. tambien las fechas hay que ponerlas como dice el compañero, MM/DD/YYYY.
Pruebo tu ejemplo y posteo el resultadol
otra cosa, los campos de la tabla son solo de hora en el between.
tiene una fecha en el campo fecha, y un campo hora sobre el que hago la consulta de un rango de hora. la fecha a consultar es un dia, y las horas son un rango. Aclaro por que me parece que cambiaste un poco la sentencia...
saludos


[QUOTE=aspi;3665754]No tienes por qué tener problemas si generas tu la consulta de esta manera:

"SELECT RESERVAS.ID_RESERVA, RESERVAS.A_NOMBRE, RESERVAS.ID_MESA, RESERVAS.FECHA_r, RESERVAS.HORA_r, RESERVAS.CANTIDAD_DE_CUB, RESERVAS.CANCELADA, RESERVAS.OCUPADA
FROM RESERVAS
WHERE (((RESERVAS.ID_MESA)=2) AND ((RESERVAS.FECHA_r)=#" & format(mi_fecha,"dd/mm/yyyy") & "#) AND ((RESERVAS.HORA_r) Between #" & format(mi_fecha_2,"dd/mm/yyyy") & " " & format(hora_1,"00:00:00") & "# And #" & format(mi:fecha_3,"dd/mm/yyyy") & " " & format(hora_2,"00:00:00") & "#) AND ((RESERVAS.CANCELADA)=False));"

Simplemente generas las cadenas adecuadas (en el formato apropiado).

Un saludo.[/QUOTE]

kezuziyo 18/01/2009 12:05

Creo que hay una funcion llamada TimeValue que te da la parte de la hora de una fecha (tambien existe otra que se llama DateValue), mira en la ayuda a ver que devuelve y si hay ejemplos

aspi 19/01/2009 18:33

x kadosh: Es posible que no entendiera bien el tema de las horas, pero la fiebre es lo que tiene.

x kezuziyo: (aspi yo nunca he trabajado con fechas y no me apetece hacer pruebas hoy, pero en lo que pones de fechas esta mal, en una instruccion SQL tiene que poner las fechas en formato mm-dd-yyyy)

Compañero kezuziyo... depende mucho del motor de la base de datos. Por ejemplo, en MySQL el formato es 'yyyy-mm-dd', en SQLserver es 'dd-mm-yyyy', en access #dd/mm/yyyy#, etc...

Saludos.

kezuziyo 21/01/2009 22:46

aspi te equivocas, el standard SQL obliga a que las fechas sean con formato mm/dd/yyyy, y estoy harto de trabajar en Access. Otra cosa es que si vas al generador de consultas pongas la fecha en formato español, pero si ves la instruccion SQL que genera verás que lo ha cambiado al formato ingles.

(antes habia puesto que no habia trabajado con fechas, queria decir con horas, con fechas trabajo todos los dias)

aspi 22/01/2009 12:45

[QUOTE=kezuziyo;3668353]aspi te equivocas, el standard SQL obliga a que las fechas sean con formato mm/dd/yyyy, y estoy harto de trabajar en Access. Otra cosa es que si vas al generador de consultas pongas la fecha en formato español, pero si ves la instruccion SQL que genera verás que lo ha cambiado al formato ingles.

(antes habia puesto que no habia trabajado con fechas, queria decir con horas, con fechas trabajo todos los dias)[/QUOTE]

Eso es compañero, si fuera un standar... pero la realidad es que cada motor tiene sus particularidades. Por ejemplo, access y mysql utilizan trim(), foxpro alltrim() y para hacer eso mismo en sqlserver, hay que hacer ltrim(rtrim(x))

Como ves, es lo mismo, pero de formas distintas.

Y el caso de las fechas tambien tiene su miga. Insisto... MySQL que sigue el standar mysql, tiene un formato de fecha yyyy-mm-dd.

De todas formas, no vamos a estar aquí discutiendo si el standar dice esto o lo otro, el caso es que cada sistema es como es, aunque todos utilicen select * from... y demás.

Un saludo febril (todabía) :)

kezuziyo 22/01/2009 13:10

No se trata de discutir sino de no confundir al usuario que ha puesto la consulta.
Y suelo trabajar en Access casi todos los dias y siempre se manejan fechas, y por eso sé que el motor Jet utilizado por MS-Access cumple el standar ANSI del SQL y las fechas son mm/dd/yyyy, pero en el generador de expresiones para facilitar a los que no son programadores lo tienes que poner como dd-mm-aaaa (o sean poniendo el orden normal nuestro y cambiando las yyyy por aaaa) y el luego genera la sentencia SQL correcta.

aspi 22/01/2009 14:09

Bueno, para no confundir a kdosh, intentaré ser lo más claro posible:

Tu consulta que funciona en acces es:

[I]SELECT RESERVAS.ID_RESERVA, RESERVAS.A_NOMBRE, RESERVAS.ID_MESA, RESERVAS.FECHA_r, RESERVAS.HORA_r, RESERVAS.CANTIDAD_DE_CUB, RESERVAS.CANCELADA, RESERVAS.OCUPADA
FROM RESERVAS
WHERE (((RESERVAS.ID_MESA)=2) AND ((RESERVAS.FECHA_r)=#1/16/2009#) AND ((RESERVAS.HORA_r) Between #12/30/1899 16:0:0# And #12/30/1899 19:0:0#) AND ((RESERVAS.CANCELADA)=False));[/I]


Si esa consulta la ejecutas desde vb y te funciona, simplemente tienes que generar la cadena de la consulta a tu gusto pasando los datos necesarios.

Yo cambiaría el formato del campo hora a 'Hora corta' para tener solo horas y munutos.


¿ Cómo lo haría yo ? (lo pongo en varias lineas para que lo puedas ver mas claro desde vb) (copia y pega)

ConsultaSQL = "SELECT RESERVAS.ID_RESERVA, RESERVAS.A_NOMBRE, RESERVAS.ID_MESA, RESERVAS.FECHA_r, RESERVAS.HORA_r, RESERVAS.CANTIDAD_DE_CUB, RESERVAS.CANCELADA, RESERVAS.OCUPADA From RESERVAS WHERE "

ConsultaSQL= ConsultaSQL & "(((RESERVAS.ID_MESA)=" & NumeroMesa

ConsultaSQL = ConsultaSQL & ") AND ((RESERVAS.FECHA_r)=#" & Format(FechaReserva, "dd/mm/yyyy") & "#) AND "

ConsultaSQL = ConsultaSQL & "((RESERVAS.HORA_r) Between # 12/30/1899 " & Format(HoraDesde, "hh:mm:0") & "# And #12/30/1899 " & Format(HoraHasta, "hh:mm:0") & "#) AND ((RESERVAS.CANCELADA)=False));"

Esta consulta es equivalente a la tuya, pero ahora le puedes pasar los valores correctos.


Espero que con esto esté todo claro, en especial para kadosh.


Un saludo.

kezuziyo 22/01/2009 14:15

Perdona que vuelva a insistir, pero esta linea
Cita:

ConsultaSQL = ConsultaSQL & ") AND ((RESERVAS.FECHA_r)=#" & Format(FechaReserva, "dd/mm/yyyy") & "#) AND "
tienes que poner "mm/dd/yyyy"
Fíjate que en el resto del post lo pones bien y dices #1/16/2009# o #12/30/1899#

aspi 22/01/2009 17:17

Efectivamente, no ma había dado cuenta del mes 16 y 30, jeje. Access utiliza mm/dd/yyyy.

x kadosh: Cambia dd/mm por mm/dd.


Resumiendo: al margen del formato de fecha y hora, como has visto, siempre puede formar la consulta en función de tus necesidades.


Saludos.


La franja horaria es GMT +2. Ahora son las 18:52.

Powered por vBulletin™ Version 3.8.10
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.
Traducido por vBsoporte - vBulletin en español
ZackYFileS - Foros de Debate