FoxPro/Visual FoxPro - filtros con SQL

 
Vista:

filtros con SQL

Publicado por albeiro (8 intervenciones) el 04/06/2006 17:20:13
hola, tengo 3 preguntas concretas:
1. al utilizar una sentencia de SQL para filtrar los registros que tengan la fecha igual a la que se ingresa por teclado, lo filtra bien, el formulario queda abierto y cuando el usuario realiza una segunda consulta, me cambia la fecha de un registro guardado con una fecha determinada por la fecha que ingreso el usuario y que quiere filtrar, el codigo que tengo es el siguiente:
select * from tabla1 where Fecha=thisform.fecha.value;
2. como hago para que los registros que salen como resultado del filtro anterior, se puedan ver en un archivo de excel? ya que la tabla que abre SQL no deja seleccionar los registros para copiarlos?
3. como hago para filtrar los registros que se encuentren entre dos fechas que ingresa el usuario por teclado? el codigo que tengo es el siguiente:
select * from tabla1 where fecha between thisform.fecha1.value .and. thisform.fecha2.value;
pero ocurre lo mismo que la pregunta 1.
todo lo anterior lo estoy realizando en foxpro 6.0
agradezco su pronta y positiva respuesta.....
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:filtros con SQL

Publicado por Plinio (7841 intervenciones) el 04/06/2006 22:29:50
La condicion puede ser
select * from tabla1 where fecha >= thisform.fecha1.value .and. fecha <= thisform.fecha2.value

Existen varios metodos para enviar a excel, uno practico seria automatizando a Excel

http://www.galeon.com/tortugaproductiva/autoexcel.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:filtros con SQL

Publicado por Ernesto Hernandez (4623 intervenciones) el 05/06/2006 16:43:25
SELEC *FROM tabla1 ;
WHERE BETWEEN(fecha,thisform.fecha1.value,thisform.fecha2.value)


PUEDES PROBAR ESTA RUTINA QUE CREE TE SIRVE PARA EXPORTAR UN ARCHIVO A EXCEL

parameters wz_cursor,wz_tit,wz_plantilla

#define im "Imposible continuar"
release oexcel

file_data = wz_cursor
select (file_data)
if !abre_plantilla_xls()
cerrar_tablas()
messagebox("No se encontró la plantilla de datos en el sistema.", 16, im)
return
endif

if vartype(oexcel) # "O"
cerrar_tablas()
messagebox("No se logro iniciar una sesión de MS Excel.", 16, im)
return
endif

*>> verificar el tipo de datos de cada campo
=verificar_formato_datos(juststem(file_data))

*>> copiar todos los registros de la tabla al portapapeles
go top
_vfp.datatoclip(,,3)

*>> llamar a la macro grabada en la plantilla
oexcel.activeworkbook.dar_formato_encabezado(fcount(), wz_tit,0)

*>> mostar excel
oexcel.visible = .t.
cerrar_tablas()

procedure abre_plantilla_xls

local err, olderror, plantilla
&& plantilla = "c:\visual\plantilla.xlt"
plantilla = wz_plantilla

if !file(plantilla)
return .f.
endif

olderror = on("error")
on error err = .t.

public oexcel

oexcel = getobject(, "excel.application")

if err
oexcel = createobject("excel.application")
endif

on error &olderror

oexcel.workbooks.open(plantilla)

endproc

*!* verifica el tipo de datos de cada campo en la tabla o cursor
*!* y formatea la columna respectiva en el libro de excel, al mismo tipo
*!* de datos. No se tienen en cuenta los campos logicos y memo pues
*!* en la consulta se deben haber formateado a otro tipo.
*!* Parametros:
*!* Tabla que debe ser seleccionada

procedure verificar_formato_datos(calias)

local i

select &calias

for i = 1 to fcount()
ctipo = type(field(i))
oexcel.columns(i).select
do case
case ctipo = "C"
oexcel.selection.numberformat = "@"
case ctipo $ "N,Y"
oexcel.selection.numberformat = "#,##0.00"
case ctipo = "D"
oexcel.selection.numberformat = "dd-mm-yyyy"
case ctipo = "T"
oexcel.selection.numberformat = "dd-mmm-yyyy hh:mm a.m./p.m."
endcase

endfor

endproc

*!* Devuelve el valor de un campo logico .t., .f. o vacio por
*!* si, no o vacio respectivamente.
*!* Parametros:
*!* Valor del campo lógico

procedure cambia_valor_logico(lvalor)

do case

case lvalor = .t.
return "Si"

case lvalor = .f.
return "No"

otherwise
return " "

endcase

endproc

*!* Devuelve el valor de un campo memo como un campo de tipo caracter.
*!* Si el campo tiene más de 254 caracteres, se devuelven los primeros 251 y tres puntos suspensivos.
*!* Si se encuentra un "Enter", es reemplazado por un punto y aparte.
*!* Parametros:
*!* Valor del campo memo

procedure cambia_campo_memo(mcampo)

mcampo = alltrim(mcampo)
mcampo = strtran(mcampo, chr(13)+chr(10), ". ")
if len(mcampo) >= 254
mcampo = substr(mcampo,1,251)+"..."
endif
mcampo = padr(mcampo,254," ")
return mcampo

endproc

**
procedure cerrar_tablas
RETURN
close tables
close tables all

endproc

SUERTE
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar