In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Pregunta sobre Fastreport usando ADO

Foro público de Xailer en español
Responder
Avatar de Usuario
Carlos Ortiz
Mensajes: 873
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Pregunta sobre Fastreport usando ADO

Mensaje 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
Bingen Ugaldebere
Mensajes: 1310
Registrado: Mié Sep 26, 2007 7:12 pm

Pregunta sobre Fastreport usando ADO

Mensaje 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
>
>
Avatar de Usuario
Carlos Ortiz
Mensajes: 873
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Pregunta sobre Fastreport usando ADO

Mensaje 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.
Juan Jose Zamora San
Mensajes: 87
Registrado: Sab Mar 15, 2008 10:29 pm

Pregunta sobre Fastreport usando ADO

Mensaje 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.
>
>
Avatar de Usuario
Carlos Ortiz
Mensajes: 873
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Pregunta sobre Fastreport usando ADO

Mensaje 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.
Avatar de Usuario
Carlos Ortiz
Mensajes: 873
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Pregunta sobre Fastreport usando ADO

Mensaje 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()
Juan Jose Zamora San
Mensajes: 87
Registrado: Sab Mar 15, 2008 10:29 pm

Pregunta sobre Fastreport usando ADO

Mensaje 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()
>
>
>
Responder