Consulta sobre fechas con SQLEXEC

289 views
Skip to first unread message

Luis la Romana

unread,
Nov 25, 2016, 10:36:54 PM11/25/16
to Comunidad de Visual Foxpro en Español
Estoy ejecutando este comando, si lo hago sin el Where funciona, alguien sabrá por qué falla al agregar where con el rango de fechas.
Fechadoc es el nombre del campo fecha en la tabla.


fechai=date(2016,11,12)
fechaf=date(2016,11,13)
h=SQLCONNECT("SISTEMA", "sa", "mysa")
SQLEXEC(h, 'SELECT * FROM TRANSAC where fechadoc>=fechai and fechadoc<=fechaf', 'cursor1')



Antonio Meza

unread,
Nov 25, 2016, 11:31:52 PM11/25/16
to Comunidad de Visual Foxpro en Español
Te falta el "?"

SQLEXEC(h, 'SELECT * FROM TRANSAC where fechadoc>= ?fechai and fechadoc<= ?fechaf', 'cursor1')

saludos
Antonio Meza

pst...@gmail.com

unread,
Nov 26, 2016, 6:06:55 AM11/26/16
to publice...@googlegroups.com
Escribiste mal la instrucción. fecha y fechaf son variables no campos. Como era escrito se interpreta q también son campos. Hay q concatenar.

fechadoc>='+dtoc(fechai)+' and fechadoc<='+dtoc(fechaf) , 'cursor1')

Enviado desde mi iPhone

Luis Maria Guayan

unread,
Nov 26, 2016, 7:55:02 AM11/26/16
to publice...@googlegroups.com

Debes utilizar consultas parametrizables con SPT anteponiendo "?" al nombre del parámetro

fechai=date(2016,11,12)
fechaf=date(2016,11,13)
h=SQLCONNECT("SISTEMA", "sa", "mysa")

SQLEXEC(h, 'SELECT * FROM Transac WHERE fechadoc BETWEEN ?fechai and ?fechaf', 'cursor1')



Luis María Guayán
Tucumán, Argentina
_______________________________
Comunidad Visual FoxPro en Español
http://comunidadvfp.blogspot.com

El 26/11/16 a las 00:36, Luis la Romana escribió:

Carlos Hidalgo

unread,
Nov 26, 2016, 8:40:37 AM11/26/16
to publice...@googlegroups.com

Talvez sea por el orden.  Pruebe asi => and =<

Luis la Romana

unread,
Nov 26, 2016, 12:16:13 PM11/26/16
to Comunidad de Visual Foxpro en Español
Muchas gracias señores, al llegar a casa pruebo sus recomendaciones, estoy muy agradecido.

Luis Salazar

unread,
Nov 26, 2016, 6:17:35 PM11/26/16
to publice...@googlegroups.com
Utiliza la funcion BETWEEN EN EL SQL en google hay ejemplos

Enviado desde mi Huawei

Carlos Hidalgo <chofohi...@gmail.com> escribió:

Luis la Romana

unread,
Nov 26, 2016, 9:29:08 PM11/26/16
to Comunidad de Visual Foxpro en Español
Estoy probando las opciones que mencionan pero no funcionan, he revisado la estructura de la tabla en el Management Studio y me entero que el campo es datetime, ¿será por eso?

Hugo C.

unread,
Nov 26, 2016, 9:41:48 PM11/26/16
to Comunidad de Visual Foxpro en Español
Intenta con esto,
 

fechai=DateTime(2016,11,12)
fechaf=DateTime(2016,11,13)

Saludos

mpulla

unread,
Nov 26, 2016, 10:10:05 PM11/26/16
to Comunidad de Visual Foxpro en Español
Hola Luis 

Si son datetime, tienes que tener en cuenta el tiempo

Saludos.
Mauricio

HernanCano

unread,
Nov 27, 2016, 1:04:39 AM11/27/16
to Comunidad de Visual Foxpro en Español
Luis:
Con los interrogación te dee funcionar.

1.
Escribe aquí cómo lo estás escribiendo por allá.... para poder seguir.

2.
¿Qué error aparece? ¿O es que el cursor resultante sale vacío?... ¿o...?......... ¿o qué?


Pero primero contesta lo primero....

Germán Fabricio Valdez

unread,
Nov 27, 2016, 2:36:41 PM11/27/16
to Comunidad de Visual Foxpro en Español
proba enviando el comando primero set language spanish

Luis la Romana

unread,
Nov 27, 2016, 9:05:13 PM11/27/16
to Comunidad de Visual Foxpro en Español

Esto ejecuto, ninguno de los tres funciona, al ejecutarse solo sale la ventana de Abrir DBF porque al final se ejecuta el copy sin que haya consulta ni tabla abierta qué copiar.
Lo otro a mencionar que al final voy a hacer es dar usar say - get para que el usuario digite las fechas de ambas variables.
Basicamente eso es todo lo que se hace contra SQL, se trae esas transacciones para preparar un reporte.

fechai=datetime(2016,11,12)
fechaf=datetime(2016,11,13)


h=SQLCONNECT("SISTEMA", "sa", "mysa")
*SQLEXEC(h, 'SELECT * FROM FACTF01 where fecha_doc=>?fechai and fecha_doc=<?fechaf', 'cursor1')
*SQLEXEC(h, 'SELECT * FROM FACTF01 where fecha_doc=>'+dtoc(fechai)+' and fecha_doc=<'+dtoc(fechaf) , 'cursor1')
SQLEXEC(h, 'SELECT * FROM FACTF01 WHERE fecha_doc BETWEEN ?fechai and ?fechaf', 'cursor1')
copy to factf01

Luis la Romana

unread,
Nov 27, 2016, 9:36:07 PM11/27/16
to Comunidad de Visual Foxpro en Español
Ahora estoy comenzado a ver este tema acá sobre fechas en Sqlexec.

http://www.tek-tips.com/viewthread.cfm?qid=1634420

Victor Espina

unread,
Nov 28, 2016, 6:07:09 AM11/28/16
to Comunidad de Visual Foxpro en Español
Luis, dos cosas:

1. Si la columna fecha_doc contiene informacion de hora, entonces debes hacer:

fechaf = DTOT(fechaf + 1) - 1



2. Cambia tu SQLEXEC() por este:

IF SQLEXEC(h, 'SELECT * FROM FACTF01 WHERE fecha_doc BETWEEN ?fechai and ?fechaf', 'cursor1') < 0
 AERROR
(aErrInfo)
 _CLIPTEXT
= aErrInfo[2]
 
?_CLIPTEXT
ENDIF


De esa forma sabras (y podras pegar aqui) la descripcion del error que estas obteniendo.  Quizas estas pensando que el problema son las fechas cuando el problema puede ser otra cosa.

Saludos

Victor Espina

Germán Fabricio Valdez

unread,
Nov 28, 2016, 2:58:29 PM11/28/16
to Comunidad de Visual Foxpro en Español
esto funciona en sql server y las fechas son datetime
sqlexec("set language spanish")
set to dmy
vfecha1="01/01/1973"
vfecha2="01/01/1975"
sqlexec("select * from clientes where fnacimiento>=?vfecha1 and fnacimiento<=?vfecha2")

Luis Maria Guayan

unread,
Nov 28, 2016, 6:25:25 PM11/28/16
to Comunidad Visual FoxPro en Español

Debes utilizar consultas parametrizables con SPT anteponiendo "?" al nombre del parámetro

fechai=date(2016,11,12)


fechaf=date(2016,11,13)
h=SQLCONNECT("SISTEMA", "sa", "mysa")

SQLEXEC(h, 'SELECT * FROM TRANSAC where fechadoc BETWEEN ?fechai and ?fechaf', 'cursor1')



Luis María Guayán
Tucumán, Argentina
_______________________________
Comunidad Visual FoxPro en Español
http://comunidadvfp.blogspot.com

El 26/11/16 a las 00:36, Luis la Romana escribió:
Estoy ejecutando este comando, si lo hago sin el Where funciona, alguien sabrá por qué falla al agregar where con el rango de fechas.

Luis la Romana

unread,
Nov 28, 2016, 9:43:43 PM11/28/16
to Comunidad de Visual Foxpro en Español
Gracias, en este momento procedo a probar.

German, la sentencia con " a mi me funciona para SQLEXEC hacia Oracle, tengo algo ya hecho así, pero en SQL solo funciona con ' tal como el ejemplo que muestro acá-

Germán Fabricio Valdez

unread,
Nov 29, 2016, 6:12:14 AM11/29/16
to Comunidad de Visual Foxpro en Español
la instruccion se puede poner con comillas dobles , comillas simples o corchetes

pero internamente dentro de la cadena solo comillas simples



El sábado, 26 de noviembre de 2016, 0:36:54 (UTC-3), Luis la Romana escribió:

HernanCano

unread,
Nov 29, 2016, 1:27:21 PM11/29/16
to Comunidad de Visual Foxpro en Español
Por favor, Luis:
Todos te hablan sobre las comillas dobles y simples. ¿Cómo has escrito los comandos al respecto?

------------------------------------------

SQLEXEC(h, 'SELECT * FROM FACTF01 WHERE fecha_doc BETWEEN ?fechai and ?fechaf', 'cursor1')

El uso de unas comillas u otras que muestras no tiene efecto sobre el comando que muestras: las únicas comillas que muestras son las más EXTERNAS en el comando.

Lo que dices es cierto PERO si usaras comillas "internas" (dentro de la cadena SQL a enviar al motor), pero no estás usando comillas adentro de la cadena SQL.

Por lo tanto la explicación que das no sirve a tu escenario (el que nos das a entender).

Lo último que escribiste debe funcionar bien.
¿Qué es lo que te pasa: te aperece algín mensaje de error? ¿Te aparecen datos que no corresponden a lo que quieres que se vea?

fechai=datetime(2016,11,12)
fechaf=datetime(2016,11,13)
h=SQLCONNECT("SISTEMA", "sa", "mysa")
SQLEXEC(h, 'SELECT * FROM FACTF01 WHERE fecha_doc BETWEEN ?fechai and ?fechaf', 'cursor1')
copy to factf01

HernanCano

unread,
Nov 29, 2016, 1:38:20 PM11/29/16
to Comunidad de Visual Foxpro en Español
Perdón, Luis:
En mi comentario debes confirmar si el campo FECHADOC es Date o Datetime.

De acuerdo a ello usarías:

fechai=date(2016,11,12)
fechaf=date(2016,11,13)

o tal vez

fechai=datetime(2016,11,12)
fechaf=datetime(2016,11,13)

antes del SELECT con interrogaciones. 

Pero para ésto sólo tú puedes hacer las pruebas y decirnos qué tipo de dato se ajusta adecuadamente a tu necesidad.

Lo importante de todo lo que te decimos es que la interrogación es la clave de la solución a tu impasse.


Luis Maria Guayan

unread,
Nov 29, 2016, 2:01:04 PM11/29/16
to publice...@googlegroups.com

Seguro que tienes datos ese día 12/11/2016? Porque estas preguntando desde las 0:00:00 del dia 12 a las 00:00:00 del día 13

Para que tomes ambos días completos:

fechai=datetime(2016,11,12, 00, 00, 00)
fechaf=datetime(2016,11,13, 23, 59, 59)



h=SQLCONNECT("SISTEMA", "sa", "mysa")

SQLEXEC(h, 'SELECT * FROM FACTF01 WHERE fecha_doc BETWEEN ?fechai and ?fechaf', 'cursor1')

BROWSE


Luis María Guayán
Tucumán, Argentina
_______________________________
Comunidad Visual FoxPro en Español
http://comunidadvfp.blogspot.com

El 27/11/16 a las 23:05, Luis la Romana escribió:

Luis la Romana

unread,
Nov 29, 2016, 9:12:50 PM11/29/16
to Comunidad de Visual Foxpro en Español
Gracias por los apoyos de este dia, en este momento voy a probar. Estaba pensado si hiciera una vista en el SQL y desde VFP ejecuto select a la vista, pero la vista me parece que no es bidirecccional como para que SQL me pida rango de fechas, tengo que hacerlo desde VFP. Luego les confirmo cómo sale esto.
Reply all
Reply to author
Forward
0 new messages