Problema con Select en rango de fechas

267 views
Skip to first unread message

Altavoz2000

unread,
Oct 13, 2023, 7:20:25 PM10/13/23
to Comunidad de Visual Foxpro en Español
Amigos, utilizo 2 DTPicker para fecha inicial y otro para fecha final

STORE Thisform.Ole_vtas_i.oBJECT._Value TO fec1   && Fecha inicial
STORE Thisform.Ole_vtas_f.obJECT._Value TO fec2   && Fecha final

fec1 = TTOD(fec1)   && Quito las horas y dejo la fecha inicial
fec2 = TTOD(fec2)   && Quito las horas y dejo la fecha final

*El campo de mi tabla es formato DATE() 

SELECT a_vtas.n_vta,fec_vta,Art,cant,precu,vend,tot_vta,v_tarj FROM a_vtas ;
WHERE fec_vta Between fec1 AND fec2 ;
INTO CURSOR lcCursor_v READWRITE

Pero no obtengo datos o obtengo sólo 3 datos de 40 que tengo

Qué podrá estar mal?

Trento

unread,
Oct 13, 2023, 8:07:54 PM10/13/23
to Comunidad de Visual Foxpro en Español
Para  empezar:

SELECT a_vtas.n_vta,fec_vta,Art,cant,precu,vend,tot_vta,v_tarj FROM a_vtas ;
WHERE fec_vta Between fec1 AND fec2 ;
INTO CURSOR lcCursor_v READWRITE

Otra cuestión, me imagino que tú mismo posteaste esto:


mas no les contestaste.


Saludos.

Job Silva

unread,
Oct 14, 2023, 1:16:33 AM10/14/23
to publice...@googlegroups.com
Saludos Trento;

Es verdad, yo postee eso, estuve checando y la verdad no ví que
hubieran respondido, pensé que no se había realizado el post, tampoco
recibí algo en mi correo, les ofrezco un disculpa, en cualquier caso
ya respondí a sus amables comentarios y el resultado es el mismo en
todos los casos.

Pero eso de "Between fec1 AND fec2"
Es incorrecto??
> --
> Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
> ---
> Has recibido este mensaje porque estás suscrito a un tema del grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
> Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/publicesvfoxpro/vvB8Tta-Rlk/unsubscribe.
> Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
> Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/de9b4ad9-26f3-42e7-9538-bc5429209428n%40googlegroups.com.



--
Job Silva Ramírez
Message has been deleted

Trento

unread,
Oct 14, 2023, 1:46:51 AM10/14/23
to Comunidad de Visual Foxpro en Español
Hola, Job.

Sí, es incorrecto.
Me extraña que incluso digas que te devuelve información mas no una error de sintaxis en el script.

La sintaxis de la función BETWEEN() es:

BETWEEN( Variable, ValorMenor, ValorMayor )

Luego entonces:

SELECT a_vtas.n_vta,fec_vta,Art,cant,precu,vend,tot_vta,v_tarj FROM a_vtas ;
WHERE BETWEEN(fec_vta, fec1, fec2) ;
INTO CURSOR lcCursor_v READWRITE

Nunca he usado el DTPicker, así que de eso ni comento.


Saludos

HernanCano

unread,
Oct 14, 2023, 3:00:29 AM10/14/23
to Comunidad de Visual Foxpro en Español
¿Y qué tal si cambias tu instrucción original por:

SELECT a_vtas.n_vta,fec_vta,Art,cant,precu,vend,tot_vta,v_tarj FROM a_vtas ;
  WHERE ttod(FEC_VTA) between fec1 AND fec2 ;
  INTO CURSOR lcCursor_v READWRITE            

??
¿Te funciona mejor?

Nos cuentas....

Job Silva

unread,
Oct 14, 2023, 2:56:16 PM10/14/23
to publice...@googlegroups.com
Gracias Trento, cambié el query y el resultado es el mismo, sólo me da
3 resultados que no sé ni de dónde los saca.

HernanCano, cambié la sintaxis y me da error ;(
> --
> Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
> ---
> Has recibido este mensaje porque estás suscrito a un tema del grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
> Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/publicesvfoxpro/vvB8Tta-Rlk/unsubscribe.
> Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
> Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/a04f6f66-5b89-49b9-ae14-6b075827012en%40googlegroups.com.



--
Job Silva Ramírez

masf...@hotmail.com

unread,
Oct 14, 2023, 5:29:04 PM10/14/23
to Comunidad de Visual Foxpro en Español

Saludados

los rangos de fechas siempre son un dolor en la cabeza
el between en el WHERE esta correcto es por compatibilidad y tatatata....

el problema puede estar en el  ._value
Que tal probando con:
fec1 = date(Thisform.Ole_vtas_i.oBJECT.year, Thisform.Ole_vtas_i.oBJECT.month , Thisform.Ole_vtas_i.oBJECT.day)
y lo mismo para fec2

la funcion 'date()'  devuelve un valor tipo 'D' sin tomar en cuenta el "set date...." es decir, no importa que 'set date' este [seteado]


pruebelo por favor y nos avisa

HernanCano

unread,
Oct 14, 2023, 9:42:43 PM10/14/23
to Comunidad de Visual Foxpro en Español
Colega:
Al igual que Trento, pensaba qe la sintaxis 

WHERE fec_vta Between fec1 AND fec2 

era inválida. Así que quise ejecutarlo y sí funciona y no es inválido y no da error.
Es decir que son válidos tanto

WHERE fec_vta Between fec1 AND fec2 

como

WHERE BETWEEN(fec_vta, fec1, fec2) 

así que --si dices que da error-- entonces muestra el mensaje de error que te da.

También es bueno que muestres otra imagen de lo q te sale con la ejecución original, uno con los sólos tres registros que salen, o otro co los q más quepan de los 40 (con la Fec_Vta que se vea).

Job Silva

unread,
Oct 14, 2023, 11:29:43 PM10/14/23
to publice...@googlegroups.com
Gracias;

Masfacil2, ya probé con la nueva sintaxis y no me marca error, pero me
da otros datos que ni siquiera están en la tabla.

HernanCano, efectivamente funciona de las dos formas y no me está
dando error, pero no me muestra los resultados correctos al momento de
hacer la petición.

Les muestro el código que tengo el botón y les dejo un par de
imágenes, no sé si se pueda subir el formulario con la tabla para que
lo vean.
> --
> Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
> ---
> Has recibido este mensaje porque estás suscrito a un tema del grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
> Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/publicesvfoxpro/vvB8Tta-Rlk/unsubscribe.
> Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
> Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/478b5f0e-b23a-4ba8-a389-e0538c037cabn%40googlegroups.com.



--
Job Silva Ramírez
Imagen1.png
Imagen2.png

HernanCano

unread,
Oct 15, 2023, 12:08:01 AM10/15/23
to Comunidad de Visual Foxpro en Español
Cuando ejecuto tu formulario, me sale lo que ves en la imagen. Indícame si algo no es de lo q hay en tu mismo DBF.
borrable.png


Job Silva

unread,
Oct 15, 2023, 12:21:31 AM10/15/23
to publice...@googlegroups.com
HernanCano, Definitivamente a mi no me sale así, adjunto imágenes.

Algunos días después de estar probando varias cosas, sí me ha dado ese resultado, pero al otro día es lo mismo.

Estoy pensando re-instalar Visual Foxpro con sus Service Packs.

Es que de plano ya es mucho y con las actualizaciones de Windows, todavía más.
O de plano reinstalo Windows con Visual FoxPro

El sáb, 14 oct 2023 a las 22:08, HernanCano (<jherna...@gmail.com>) escribió:
Cuando ejecuto tu formulario, me sale lo que ves en la imagen. Indícame si algo no es de lo q hay en tu mismo DBF.
borrable.png


--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/publicesvfoxpro/vvB8Tta-Rlk/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a publicesvfoxp...@googlegroups.com.


--
Job Silva Ramírez
Imagen1.png
Imagen2.png

Walter Valle

unread,
Oct 15, 2023, 2:36:45 PM10/15/23
to Comunidad de Visual Foxpro en Español
Hola,

Lo correcto es que tus variables las envíes como parámetros:

SELECT  a_vtas.n_vta,fec_vta,Art,cant,precu,vend,tot_vta,v_tarj 
FROM    a_vtas ;
WHERE   fec_vta Between ?fec1 AND ?fec2 ;
INTO CURSOR lcCursor_v READWRITE

Saludos,

El viernes, 13 de octubre de 2023 a la(s) 23:16:33 UTC-6, Altavoz2000 escribió:

Alejandro Isla

unread,
Oct 15, 2023, 9:45:24 PM10/15/23
to Comunidad de Visual Foxpro en Español
Hola. En la pantalla veo que haces un filtro por con tarjeta/sin/todas, pero eso n ose ve reflejado en el sql que escribis.

¿no está implemenetado o no es el sql exacto que usas en la aplicación? 

Saludos.

Job Silva

unread,
Oct 15, 2023, 10:43:34 PM10/15/23
to publice...@googlegroups.com
Gracias;

Walter Valle, Gracias, no había usado '?' para ese tipo de consultas y veo que funciona igual.
¿Cual sería la ventaja en incluir ese comando?

Uso un código muy similar para ver las 10 mayores ventas, pero únicamente me parecen 3, el código es el siguiente:

fec1 = date(Thisform.dt1.oBJECT.year, Thisform.dt1.oBJECT.month , Thisform.dt1.oBJECT.day)
fec2 = date(Thisform.dt2.oBJECT.year, Thisform.dt2.oBJECT.month , Thisform.dt2.oBJECT.day)
 

  SELECT TOP 10 a_vtas.art,a_vtas.vend,fec_vta, ;
  SUM(a_vtas.cant);
  FROM a_vtas;
  WHERE FEC_vta BETWEEN fec1 AND fec2 ;
  GROUP BY art,vend,fec_vta;
  ORDER BY 4 DESC ;
  INTO CURSOR lcCursor READWRITE

Algo me estará faltando??


Alejandro Isla, Efectivamente, no incluí esa parte, hago un CASE para saber qué opción marcaron, uso el siguiente código:

DO CASE
CASE Thisform.optiongroup1.option1.Value = 1
tarj = 'no'
SELECT a_vtas.n_vta,fec_vta,Art,cant,precu,tot_vta,v_tarj FROM a_vtas ;

WHERE fec_vta Between ?fec1 AND ?fec2 ;
HAVING v_tarj = 'no';
INTO CURSOR lcCursor_v READWRITE
CASE Thisform.optiongroup1.option2.Value = 1
tarj = 'si'
SELECT a_vtas.n_vta,fec_vta,Art,cant,precu,tot_vta,v_tarj FROM a_vtas ;

WHERE fec_vta Between ?fec1 AND ?fec2 ;
HAVING v_tarj = 'si';
INTO CURSOR lcCursor_v READWRITE

CASE Thisform.optiongroup1.option3.Value = 1
SELECT a_vtas.n_vta,fec_vta,Art,cant,precu,tot_vta,v_tarj FROM a_vtas ;
  WHERE FEC_VTA between ?fec1 AND ?fec2 ;
  INTO CURSOR lcCursor_v READWRITE  
ENDCASE

Éste código lo empleo para ver las ventas con tarjeta, sin tarjeta o todas las ventas realizadas.

Lo que no sé hacer es mostrar las ventas tal y como se van dando o mejor dicho cómo las voy guardando

Lo que me gustaría hacer que se viera las ventas tal y como se hicieron, por ejemplo:

Fecha de venta   Hora de venta   No. Venta   No. de artículo   Descripción               Cantidad   Precio U,   Sub-total   Vendedor   Total       Pago_con      Vuelto
   20/07/2023           10:30                80                     1               Cigarros Marlboro           2          $70.00       $140.00    Juanito
   20/07/2023           10:30                80                     2               Encendedor Tokai           1          $15.00       $15.00      Juanito       $85.00     $100.00        $15.00
  20/07/2023            10:35                81                     1               Tortillinas Tia Rosa          1         $25.00       $25.00       Juanito       $25.00    $50.00           $25.00
  20/07/2023            10:40                82                     1               Leche Alpura 1 L             1         $28.00       $28.00       Juanito       
  20/072023             10:40                82                     2               Panqué Tia Rosa             1        $32.00       $32.00       Juanito       $60.00     $100.00         $40.00

Por ejemplo

Adjunto imagen con la estructura de la tabla.




--
Job Silva Ramírez
Imagen2.png

HernanCano

unread,
Oct 15, 2023, 10:47:24 PM10/15/23
to Comunidad de Visual Foxpro en Español
En la imagen que yo te envío, sí se ven muchos registros (85).

¿La viste?

HernanCano

unread,
Oct 15, 2023, 11:07:47 PM10/15/23
to Comunidad de Visual Foxpro en Español
¿Qué quiere decir "... que se viera las ventas tal y como se hicieron..."?

1. ¿Con los datos correctos (y no se ven correctos)?

2. ¿Ordenados (y no están saliendo ordenados)?


El domingo, 15 de octubre de 2023 a la(s) 21:43:34 UTC-5, Altavoz2000 escribió:

Job Silva

unread,
Oct 16, 2023, 1:38:54 AM10/16/23
to publice...@googlegroups.com
Hernan Cano;
Si vi la imagen y difiere mucho de cómo salían los datos. Lo curioso es que después de probar varios códigos, le ponía CTOD a las fechas, luego DTOC o TTOD, alguno no me marcaba error y ya me aparecían los datos completos.
Pero al otro día, me volvía a salir sólo 3 registros y erróneos, nunca supe de dónde los sacaba, porque me aparecía una venta número 70 y eso no existía en la tabla.

Y con la imagen que presentaste, sospeché que Visual FoxPro se había dañado o el motor de SQL, por lo que volví a instalar Windows y Visual FoxPro y ahora ya me aparecen los datos tal y como tú los muestras.

Me gustaría que me mostrara los datos por venta y al final de cada venta el total, con cuánto pagó y hasta el vuelto.

Ya me he peleado con el query, pero no me sale.

--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/publicesvfoxpro/vvB8Tta-Rlk/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a publicesvfoxp...@googlegroups.com.


--
Job Silva Ramírez

Zarlu

unread,
Oct 16, 2023, 8:53:59 AM10/16/23
to Comunidad de Visual Foxpro en Español
Buenos días altavoz2000!

Noto algo que me desconcierta...
En la imágenes de los browse que muestras aparece como tabla/cursor "a_vtas_a"
y en los códigos que veo en estos mensajes "...From a_vtas...".
Entonces...contra que tabla se están evaluando los resultados obtenidos?

Suerte
zarlu
Chetumal, Quintana Roo, México

Sin título3.png

Job Silva

unread,
Oct 16, 2023, 3:55:15 PM10/16/23
to publice...@googlegroups.com
Zarlu;

Ahora que lo mencionas, es raro, no tengo una tabla con ese nombre y no me fijé en ese detalle, de hecho tengo muy pocas tablas, sólo para lo básico.
Quiero pensar que cuando se dañó Visual FoxPro hacía cosas raras, por ejemplo maximizar la ventana principal, sólo hasta que encontré un truco de un programador europeo me funcionó.

Lo que sí, me siguen saliendo sólo 3 registros en un formulario de Select Top 10, la rutina que empleo es la siguiente:

LOCAL fec1 as Date, fec2 as Date

SET CENTURY ON
SET DATE DMY

STORE Thisform.dt1.oBJECT.Value TO fec1
STORE Thisform.dt2.obJECT.Value TO fec2

SELECT TOP 10 a_vtas.art, UPPER(a_vtas.vend), fec_vta, ;
SUM(a_vtas.cant) ;
FROM a_vtas ;
WHERE FEC_vta BETWEEN fec1 AND fec2 ;
GROUP BY 1, 2, 3 ;

ORDER BY 4 DESC ;
INTO CURSOR lcCursor

Algo estará mal??

Saludos



--
Job Silva Ramírez

Ignacio Debole

unread,
Oct 16, 2023, 4:01:24 PM10/16/23
to publice...@googlegroups.com
hola Job Silva
    leyendo rápidamente el hilo, no veo que nos hayas dicho que formato de columna tiene la columna FEC_vta, todos damos por supuesto que es "date", pero por las dudas te lo pregunto.
    Saludos

Ignacio

Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/CAJitgN8gXu_BNMVra9wxVUm8Pef2CU4sSOS4D67RfO7pXki87A%40mail.gmail.com.

Zarlu

unread,
Oct 16, 2023, 4:07:25 PM10/16/23
to Comunidad de Visual Foxpro en Español
Qué tal altavoz2000 !

Pues ese detalle me hace pensar que no se está extrayendo la consulta de donde deseas y no se está comparando de donde se debe.

Te sugiero aislar la tabla " a_vtas"  a un nuevo proyecto y mediante un prg hacer pruebas.
Y sino tienes inconveniente con la privacidad de tus datos mándame tu tabla a mi correo para hacer pruebas.

Suerte
zarlu
Chetumal, Quintana Roo, México

Job Silva

unread,
Oct 16, 2023, 10:43:13 PM10/16/23
to publice...@googlegroups.com
Zarlu, ya te envié la tabla a tu correo, gracias.

Ignacio, efectivamente el formato del campo fec_vta es DATE(), creo que lo mencioné en el primer hilo.
Gracias por preguntar.





--
Job Silva Ramírez

HernanCano

unread,
Oct 17, 2023, 12:39:08 AM10/17/23
to Comunidad de Visual Foxpro en Español
Debí hacer unos ajustes a los comandos que usas y le ejecución queda así: ver imagen 1. ¿Es lo que desearías? Creo que no has mencionado cuál el el filtro de fechas que necesitas)

Los ajustes que hice fueron: ver imagen 2.

Conclusión:

1. Es erróneo que uses DTOC() en la forma en que lo estás usando.

Sé que muchos, muchísimos de los colegas hacen éso, pero es erróneo, y la muestra es lo que acabas de descubrir.

Quienes lo hacen, lo hace primordialmente para "mostrar datos" en un TextBox. Pero no deben hacerlo en el cursor; pudieran hacer lo en las propiedades del TextBox (grid, combo, listbox, etc), pero no en el cursor.... o vble como lo estás haciendo tú.

2. No se dice "el formato del campo fec_vta es DATE()".
Sí se dice "el tipo de dato del campo FEC_VTA es DATE", o "el tipo de dato del campo FEC_VTA es Fecha".

borrable.png
borrable2.png




El lunes, 16 de octubre de 2023 a la(s) 14:55:15 UTC-5, Altavoz2000 escribió:

Zarlu

unread,
Oct 17, 2023, 10:42:20 AM10/17/23
to Comunidad de Visual Foxpro en Español
Buenos días altavoz2000 !

Hice pruebas con la tabla y el código que me mandaste.
La imagen que adjunto es el resultado de Top 10 rango 20/jul/2023---31/jul/2023.
Es lo que deseas?

Te sugiero revisar el formato de fecha que estás mandando a la consulta.
....
STORE Thisform.dt1.oBJECT.Value TO fec1
STORE Thisform.dt2.obJECT.Value TO fec2
Wait TRANSFORM(fec1)+" | "+Vartype(fec1) Windows
Wait TRANSFORM(fec2)+" | "+Vartype(fec2) Windows
....

Suerte
zarlu
Chetumal, Quintana Roo, México

Sin título.png

Job Silva

unread,
Oct 23, 2023, 12:55:47 AM10/23/23
to publice...@googlegroups.com
Muchas gracias a todos por ayudarme;

Un día funcionaba y al otro día ya no, hasta que me decidí formatear y volver a instalar todo, o sea Windows, Office, Visual FoxPro y WinRAR y otras cosas y finalmente lo pude solucionar.

Zarlu, muchas gracias, finalmente lo solucioné con el siguiente código:

SET TALK OFF
LOCAL fec1 as Date, fec2 as Date, fec_vta as Date
SET CENTURY ON
SET DATE DMY

STORE Thisform.dt1.oBJECT.Value TO fec1
STORE Thisform.dt2.obJECT.Value TO fec2
fec1 = TTOD(fec1)
fec2 = TTOD(fec2)

USE SYS(5) + SYS(2003) + '\database\a_vtas.dbf' SHARED AGAIN

SET ENGINEBEHAVIOR 90

SELECT TOP 20 art,cant,vend,fec_vta,;
SUM(a_vtas.cant);
FROM a_vtas;
WHERE FEC_vta BETWEEN fec1 AND fec2;
GROUP BY art,vend,fec_vta,cant;
ORDER BY cant DESC;
INTO CURSOR lcCursor

Así no he tenido problemas, qué te parece?

Les mando a todos un caluroso abrazo.

Libre de virus.www.avg.com

--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/publicesvfoxpro/vvB8Tta-Rlk/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a publicesvfoxp...@googlegroups.com.


--
Job Silva Ramírez

integral

unread,
Oct 23, 2023, 1:59:15 AM10/23/23
to Comunidad de Visual Foxpro en Español
Que Bueno que lo solucionaste.
 
También tuve que mandar a realizar un formateo de Fabrica a mi Laptop. Hubo un corte de luz aquí por la zona.

Tenia que cargar mi Laptop y gran sorpresa y dolor de cabeza se activo el BitLocker del Windows 10. 
Estuve 3 días batallando en desactivar el BitLocker. Por mas que revise mis cuentas me indicaba que no tenia grabado la clave de recuperación. 
La única solución era formatear mi Laptop.

Claro que este costo lo tuve que asumir yo por culpa y gracia de Microsoft Windows 10.

Ya instale casi todos los programas inclusive hoy instale el Sql Server 2008r2 

Ahora quiero crear un Script que me permita realizar el Backup.

Saludos,

Integral
Reply all
Reply to author
Forward
0 new messages