Mostrar resultado de consulta en un GRID de un formulario VFP 9.0

Abraham Anaya Garcia
23 de Mayo del 2011
Hola,

Bueno quisiera saber si me podrían asistir con este pequeño problema con el que me eh topado, verán eh estado investigando como manipular objetos del tipo hojas de Excel con Visual Foxpro 9.0.

Eh logrado avances pero ahora quisiera saber como puedo exportar el resultado de una consulta realizada con instrucciones de SQL ya sea directamente con la consulta o almacenándola en un cursor y enviando el cursor hacia la hoja de Excel, eh estado intentando haciéndolo directo de la consulta pero se me hace un bucle infinito al momento de enviar los resultados hacia Excel, verán el código lo tengo de la siguiente forma:
*******
Local nCelda &&Para in aumentando la fila, se supone que hacia abajo
CLOSE TABLES ALL &&Cerrar tablas para evitar conflictos
Use Recamiones In 0 Alias Recamiones Shared &&La tabla con la que trabajo
Select Recamiones
SELECT Recamiones.date, Recamiones.emb, Recamiones.ton, Recamiones.cli FROM Recamiones INTO CURSOR camiones2 READWRITE &&La consulta
&& A partir de aquí creo el objeto de Excel con sus propiedades y todo
tmpsheet = GetObject('','excel.sheet')
XLApp = tmpsheet.application
XLApp.ActiveWindow.DisplayZeros = .F. &&No muestra las celdas en valor 0
XLApp.ActiveWindow.DisplayGridlines = .T. &&Muestra las líneas de división
XLApp.Visible = .T. &&Aplicacion visible
XLApp.WorkBooks.Add() &&Agrega una Hoja de calculo
XLSheet = XLApp.ActiveSheet
&& Empiezo a insertar en las filas los resultados generados por la consulta
XLSheet.Columns("A:A").ColumnWidth=20.00
XLSheet.Cells(1,1).VALUE='Fecha'
XLSheet.Cells(1,2).VALUE='Embarque'
XLSheet.Cells(1,3).VALUE='Toneladas'
XLSheet.Cells(1,4).VALUE='Cliente'

nCelda = 1
Scan
XLSheet.Cells(2,nCelda).VALUE = Recamiones.date
XLSheet.Cells(3,nCelda).VALUE = Recamiones.emb
XLSheet.Cells(4,nCelda).VALUE = Recamiones.ton
XLSheet.Cells(5,nCelda).VALUE = Recamiones.cli
nCelda = nCelda + 1
EndScan
Thisform.Refresh
*****

Ahora se me presentan algunos problemas con ese código pues verán, al parecer solo me la el primer campo de la tabla en vez de todo el conjunto de resultados y este me lo repite infinitas veces hacia la derecha y no hacia abajo (como si se tratara de una tabla), había pensado en algo como un "for i=o to valor total de la consulta" o algo así pero no tengo idea clara de como.

Podrían darme una mano, si se hace con un cursor seria mas facil?, y como seria, agradezco la ayuda de ante mano

Saludos

Cristobal Melara
02 de Junio del 2011
podrias probar el codigo como sigue:

nCelda = 1
Scan while !eof()
XLSheet.Cells(nCelda,2).VALUE = Recamiones.date
XLSheet.Cells(nCelda,3).VALUE = Recamiones.emb
XLSheet.Cells(nCelda,4).VALUE = Recamiones.ton
XLSheet.Cells(nCelda,5).VALUE = Recamiones.cli
nCelda = nCelda + 1
EndScan
****el formaro para Cells() es en tu caso XLSheet.Cells(Linea,Columna)

David Ortega
18 de Octubre del 2011
No se que es lo exactamante desees pero podrias intentar con lo siguiente.
SELECT Campos FROM Tabla WHERE Condicion INTO CURSOR cursortemporal
USE cursortemporal
COPY TO NombreArchivo XL5
Espero sirva.
Saludos