Para comentarles, que se me presentó un desarrollo de Interfaz de exportar datos de BD Progress hacía PostgreSql, el asunto es tenía que juntar información contenida en varias tablas y exportar a las de PostgreSql pero resumidas, para lo cual hice mano de Visual Foxpro 9 ... y bueno la programación es muy similar a FW y Harbour/xHarbour.
En VFP existe esta función: SQLEXEC es muy potentísima pues permite mediante SQL atacar cualquier BD y devuelve cursores que pueden manejarse como Cursores propiamente dichos y también como tablas DBF a las cuales incluso se pueden crear índices, hacer búsquedas, append, reclock, etc.
Aquí pongo una porción del código empleado para ver si con FW se puede hacer o tratar de encontrar algo similar.
- En cuanto a TEXT TO ... he probado con FW y funciona correctamente y está muy bueno pues evita la fatiga de estar concatenando la cadena de la consulta.
- En el código mostrado, la instrucción: SQLEXEC(nBdFe,cQry,"oRstmpdet") hace la consulta a la BD contenida en la variable cQry y el resultado es un Recordset (el nombre puede ser distinto al mostrado).
- El Recordset devuelto - en este caso se llama "oRstmpdet"- se puede manipular como si fuera una tabla DBF.
- En este caso el Recordset existe mientras la conexión está activa, y se elimina automáticamente cuando se cierra la conexión
Ejemplo 1:
- Code: Select all Expand view
cQry := " "
TEXT TO cQry NOSHOW TEXTMERGE PRETEXT 1+2+4+8
SELECT fedetalle.tipodoc, fedetalle.tipoletra, fedetalle.seriedoc, fedetalle.numerodoc, fedetalle.nroitem
FROM fedetalle
WHERE fedetalle.tipodoc = '<<ALLTRIM(cTipodoc)>>' AND
fedetalle.tipoletra = '<<cTipoletra>>' AND
fedetalle.seriedoc = <<cSeriedoc>> AND
fedetalle.numerodoc= <<nNnumerodoc>> AND
fedetalle.nroitem = <<nNroitem>>
ENDTEXT
SQLEXEC(nBdFe,cQry,"oRsCab")
GO TOP
DO WHILE NOT EOF()
....
....
Acá otro ejemplo de SQLEXEC en donde se puede copiar el Recordset a una tabla DBF é incluso la crea en una carpeta del Disco duro.
Ejemplo 2:
- Code: Select all Expand view
cQry := " "
TEXT TO cQry NOSHOW TEXTMERGE PRETEXT 1+2+4+8
SELECT fedetalle.tipodoc, fedetalle.tipoletra, fedetalle.seriedoc, fedetalle.numerodoc, fedetalle.nroitem
FROM fedetalle
WHERE fedetalle.tipodoc = '<<ALLTRIM(cTipodoc)>>' AND
fedetalle.tipoletra = '<<cTipoletra>>' AND
fedetalle.seriedoc = <<cSeriedoc>> AND
fedetalle.numerodoc= <<nNnumerodoc>> AND
fedetalle.nroitem = <<nNroitem>>
ENDTEXT
cmdcab = SQLEXEC(nBdFe,cQry,"oRsCab")
COPY TO .\DATA\cabecera.dbf
SELECT 1
USE cabecera SHARED ALIAS cabecera
INDEX ON tipodoc+tipoletra+seriedoc+numerodoc TO .\DATA\cabecera
GO TOP
DO WHILE NOT EOF()
....
....
¿Existe alguna función de FW similar a SQLEXEC ?.
Saludos.
Atte.
Lucho Montero.
Lima - Perú.
---------------------------------------------------------------------------------------------
FW + xHarbour 1.2.3 + ADO + Borland C 5.8.2