Página 1 de 1

Pregunta sobre Fastreport usando ADO

Publicado: Jue Dic 30, 2010 5:34 am
por Carlos Ortiz
Bueno hice funcionar el fastreport usando conexión ADO, por ejemplo tengo un
Dbbrowse cargado con datos que es la respuesta de un TSqlQuery y llamo al
report usando SetXailerDataSet y todo bien.
Pero cuando en el form tengo 2 o mas querys que me están mostrando datos
(por ejemplo facturas y debajo un detalle de los items de cada una) y pido
un simple listado con el dataset de las facturas solamente me empieza a dar
errores de argumento + ó argumento str y se demora y empieza a dar errores
de los otros query.
Alguién que ilumine el camino, muchas gracias.
PD, probé de pasarle todos los dataset abiertos y sigue igual, si

Pregunta sobre Fastreport usando ADO

Publicado: Jue Dic 30, 2010 9:38 am
por Bingen Ugaldebere
A pesar de que puedas pasarle los Datasets y deberí­a de andar, con ADO
puedes hacerlo de una manera totalmente diferente.
El propio FR contiene un motor de ADO totalmente operativo, para lo cual
has de pasarle la cadena de conexión ADO CON LA FUNCIí“N
SetADOConnectStr() y el resto de la operativa del ado, select incluso
con un diseñador de Querys esta dentro del propio FR.
Busca dentro del editor de FR la pestaña DATA arriba a la derecha entre
Código y Page1 y te sorprenderás con los botones que parecen en el panel
de herramientas izquierdo.
Salu2.
El 30/12/2010 5:34, Carlos Ortiz escribió:
> Bueno hice funcionar el fastreport usando conexión ADO, por ejemplo tengo un
> Dbbrowse cargado con datos que es la respuesta de un TSqlQuery y llamo al
> report usando SetXailerDataSet y todo bien.
>
> Pero cuando en el form tengo 2 o mas querys que me están mostrando datos
> (por ejemplo facturas y debajo un detalle de los items de cada una) y pido
> un simple listado con el dataset de las facturas solamente me empieza a dar
> errores de argumento + ó argumento str y se demora y empieza a dar errores
> de los otros query.
>
> Alguién que ilumine el camino, muchas gracias.
>
> PD, probé de pasarle todos los dataset abiertos y sigue igual, si
>
>

Pregunta sobre Fastreport usando ADO

Publicado: Jue Dic 30, 2010 6:18 pm
por Carlos Ortiz
Gracias Bingen por responder,
había visto esos botones y anduve metiendo las narices por ahi, el tema es
que por una cuestión de organización interna en nuestras clases abstractas
manejamos el acceso a los datos, tanto sea para actualizar como para buscar
y devolver algo. (Entendemos que de esta forma es mas ordenada la
programación)
por ejemplo en la clase clientes hay un metodo que me devuelve un oData con
la lista de clientes activos
//---
METHOD ListadodeClientes CLASS clientes
//---
local oData := SqlQuery("select ... from clientes where idestado = 1")
oData:Open
RETURN oData
y no se como pasarle este oData al fastreport, no quiero embeber codigo en
fastreport para no quedar pegado con esta herramienta, o con cualquier otra,
seguiré leyendo a ver que onda.
Nuevamente gracias.

Pregunta sobre Fastreport usando ADO

Publicado: Jue Dic 30, 2010 7:18 pm
por Juan Jose Zamora San
Te mando las clases que utilizo yo.
CreaInforme( "odds15", "Estadistica de Vales gasolina.", ;
{ { "EstadisticaVales", ::oSQLQuery8 } },
"FicherosVales22.fr3", ;
{ { "Variables", "Filtro", "'" + cMatricula1 + "'" } }, ,
;
IIF( LEN( aAcciones ) > 0, aAcciones, NIL ) )
//---------------------------------------------------------- --------------------
//
//---------------------------------------------------------- --------------------
FUNCTION CreaInforme( cIcono, cTitle, aDatos, cNombreListado,
aVariables, aFunciones, aAcciones )
LOCAL oInforme, n
WITH OBJECT oInforme:= FrReportManager():New( Application:cDirectory +
"DllFrSystH.dll" )
IF !HB_Isnil( cIcono )
:SetIcon( cIcono )
ELSE
:SetIcon( 1 )
ENDIF
//-------- add function to FastReport (see calls
example)----------------------
:SetEventHandler("Report", "OnUserFunction", {|FName, FParams|
CallUserFunction(FName, FParams)})
:AddFunction("function XBaseStr(nValue: Double, nLength: Variant =
EmptyVar, nDecimals: Variant = EmptyVar): Variant",;
"My Lovely Functions!", "It's a XBase Str() function!")
IF !HB_isnil( aFunciones )
FOR n:= 1 TO LEN( aFunciones )
:AddFunction( aFunciones[ n, 1 ], aFunciones[ n, 2 ],
aFunciones[ n, 3 ] )
NEXT
ENDIF
:LoadLangRes( Application:cDirectory + "DLLLENGUA" + "Spanish.xml")
:ClearDataSets()
:SetProperty( "PDFExport", "Compressed", .T. )
:SetProperty( "PDFExport", "EmbeddedFonts", .T. )
:SetProperty( "PDFExport", "PrintOptimized", .T. )
:SetProperty( "PDFExport", "Author", "************" )
:SetProperty( "PDFExport", "Subject", "" )
:SetProperty( "PDFExport", "Creator", "*********." )
// Botonoes del preview.
IF !AppData:lDisenoListados // Si no estamos diseñando ponemos
todos los botones.
// Los botones que queramos que se vean, se tienen que sumar.
:PreviewOptions:SetButtons( FR_PB_PRINT + FR_PB_EXPORT +
FR_PB_ZOOM + FR_PB_FIND + ;
FR_PB_OUTLINE + FR_PB_NAVIGATOR )
ENDIF
IF LEN( aDatos[ 1 ] ) > 1 //Si creamos nosotros el origen de datos.
FOR n:= 1 TO LEN( aDatos )
SetXailerDataSet( oInforme, aDatos[ n, 1 ], aDatos[ n, 2 ] )
NEXT
ENDIF
IF !HB_Isnil( cNombreListado )
:LoadFromFile( Application:cDirectory + "Reportes" +
cNombreListado )
ELSE
:SetFileName( Application:cDirectory + "Reportes" + "Pruebas.fr3" )
ENDIF
// Vemos si tiene variables.
// Para que funcione las variables el lenguaje de programación que
debe utilizarse
// en el listado es el Pascal scrit
IF !HB_ISNIL( aVariables )
FOR n:= 1 TO LEN( aVariables )
:AddVariable( aVariables[ n, 1 ],;
aVariables[ n, 2 ],;
aVariables[ n, 3 ] )
NEXT
ENDIF
IF LEN( aDatos[ 1 ] ) == 1 //El listado tiene la conexión y el
acceso a los datos.
:SetADOConnectPartStr( "ADODatabase1" ,;
"Data Source" ,;
Application:cDirectory + aDatos[ 1, 1 ] )
ENDIF
IF !HB_ISNIL( aAcciones )
FOR n:= 1 TO LEN( aAcciones )
:SetProperty( aAcciones[ n, 1 ], aAcciones[ n, 2 ],
aAcciones[ n, 3 ] )
NEXT
ENDIF
IF AppData:lDisenoListados
:DesignReport( )
ELSE
:ShowReport()
ENDIF
:DestroyFr()
END WITH
oInforme:= NIl
RETURN NIL
//---------------------------------------------------------- --------------------
El 30/12/2010 18:18, Carlos Ortiz escribió:
> Gracias Bingen por responder,
>
> habí­a visto esos botones y anduve metiendo las narices por ahi, el tema es
> que por una cuestión de organización interna en nuestras clases abstractas
> manejamos el acceso a los datos, tanto sea para actualizar como para buscar
> y devolver algo. (Entendemos que de esta forma es mas ordenada la
> programación)
>
> por ejemplo en la clase clientes hay un metodo que me devuelve un oData con
> la lista de clientes activos
>
> //---
> METHOD ListadodeClientes CLASS clientes
> //---
> local oData := SqlQuery("select ... from clientes where idestado = 1")
> oData:Open
> RETURN oData
>
> y no se como pasarle este oData al fastreport, no quiero embeber codigo en
> fastreport para no quedar pegado con esta herramienta, o con cualquier otra,
> seguiré leyendo a ver que onda.
>
> Nuevamente gracias.
>
>

Pregunta sobre Fastreport usando ADO

Publicado: Vie Dic 31, 2010 5:33 am
por Carlos Ortiz
Gracias Juan José, he usado tu rutina y me pasa exactamente lo mismo, al
lanzar el report invoca cosas de los otros querys que hay en el formulario
desde dónde fué lanzado, provoncando carteles con error de sintaxis 1081 y
1099
Gracias igual, seguiré probando.

Pregunta sobre Fastreport usando ADO

Publicado: Vie Dic 31, 2010 6:45 am
por Carlos Ortiz
Lo resolvi clonando el dataset que tiene uno de los dbbrowse que hay en
pantalla y que es el query que quiero listar. No me gusta pero es una
solución.
local oData
oData := ::oDBBrowseProveedores:oDataSet:Clone()
CreaInforme( "pildora_32", "Estadistica de Vales gasolina.", ;
{ { "proveedores", oData } },;
"proyectodbfarmareportesreporte_proveedores.fr3", ;
{{ "Variables", "Filtro", "'123'" } }, ,NIL )
oData:Close()

Pregunta sobre Fastreport usando ADO

Publicado: Vie Dic 31, 2010 8:04 am
por Juan Jose Zamora San
Yo siempre utilizo un query nuevo para realizar los listados
::oSQLQuery8, donde paso todos los filtros que necesito.
Creo que el clonar te puede dar mas problemas que beneficios.
Saludos.
El 31/12/2010 6:45, Carlos Ortiz escribió:
> Lo resolvi clonando el dataset que tiene uno de los dbbrowse que hay en
> pantalla y que es el query que quiero listar. No me gusta pero es una
> solución.
>
> local oData
> oData := ::oDBBrowseProveedores:oDataSet:Clone()
> CreaInforme( "pildora_32", "Estadistica de Vales gasolina.", ;
> { { "proveedores", oData } },;
> "proyectodbfarmareportesreporte_proveedores.fr3", ;
> {{ "Variables", "Filtro", "'123'" } }, ,NIL )
> oData:Close()
>
>
>