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.
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.
Imprimir Reporte de una Tabla en Oracle
-
- Mensajes: 113
- Registrado: Lun Nov 13, 2006 5:29 am
Imprimir Reporte de una Tabla en Oracle
Buenas Tardes por aca
Estoy tratando de imprimir un reporte tipo listado usando una base de datos
en Oracle, la conexion es por ADO. Ya trate de mil formas, pero lo unico que
me logra imprimir son los encabezados y no la informacion de los registros.
Que podria estar haciendo mal
Adjunto parte del codigo y gracias por la ayuda.
Saludos
//---------------------------------------------
METHOD Reporte( lPreview )
LOCAL oReport,clpreview, oFont1, oFont2
FIELD pais, descripcion
::oSqlTable1:SaveState( .T. )
::oSqlTable1:GoTop()
With Object oFont1 := TFont():New()
:cName := "Arial"
:nSize := 12
:lBold := .T.
END WITH
With Object oFont2 := TFont():New()
:cName := "Arial"
:nSize := 10
:lBold := .f.
END WITH
if lPreview
REPORT oReport TITLE "Listado de Paises" ;
HEADER DtoC( Date() ) + " " + Time() ;
FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
JOBNAME "PCventa - Listado de Paises" ;
PREVIEW MODAL ;
FONT oFont1, oFont2
Else
REPORT oReport TITLE "Listado de Paises" ;
HEADER DtoC( Date() ) + " " + Time() ;
FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
JOBNAME "PCventa - Listado de Paises" ;
FONT oFont1, oFont2
Endif
COLUMN OF oReport ;
TITLE "Código" ;
DATA ::odbBrowse1:Pais ;
ALIGN taLEFT ;
CHARSIZE 10
COLUMN OF oReport ;
TITLE "Nombre" ;
DATA ::odbBrowse1:Descripcion ;
ALIGN taLEFT ;
CHARSIZE 10
RUN REPORT oReport
oFont1:Destroy()
oFont2:Destroy()
::oSqlTable1:RestoreState( .T. )
Return NIL
//---------------------------------------------
Estoy tratando de imprimir un reporte tipo listado usando una base de datos
en Oracle, la conexion es por ADO. Ya trate de mil formas, pero lo unico que
me logra imprimir son los encabezados y no la informacion de los registros.
Que podria estar haciendo mal
Adjunto parte del codigo y gracias por la ayuda.
Saludos
//---------------------------------------------
METHOD Reporte( lPreview )
LOCAL oReport,clpreview, oFont1, oFont2
FIELD pais, descripcion
::oSqlTable1:SaveState( .T. )
::oSqlTable1:GoTop()
With Object oFont1 := TFont():New()
:cName := "Arial"
:nSize := 12
:lBold := .T.
END WITH
With Object oFont2 := TFont():New()
:cName := "Arial"
:nSize := 10
:lBold := .f.
END WITH
if lPreview
REPORT oReport TITLE "Listado de Paises" ;
HEADER DtoC( Date() ) + " " + Time() ;
FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
JOBNAME "PCventa - Listado de Paises" ;
PREVIEW MODAL ;
FONT oFont1, oFont2
Else
REPORT oReport TITLE "Listado de Paises" ;
HEADER DtoC( Date() ) + " " + Time() ;
FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
JOBNAME "PCventa - Listado de Paises" ;
FONT oFont1, oFont2
Endif
COLUMN OF oReport ;
TITLE "Código" ;
DATA ::odbBrowse1:Pais ;
ALIGN taLEFT ;
CHARSIZE 10
COLUMN OF oReport ;
TITLE "Nombre" ;
DATA ::odbBrowse1:Descripcion ;
ALIGN taLEFT ;
CHARSIZE 10
RUN REPORT oReport
oFont1:Destroy()
oFont2:Destroy()
::oSqlTable1:RestoreState( .T. )
Return NIL
//---------------------------------------------
- ignacio
- Site Admin
- Mensajes: 9457
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Imprimir Reporte de una Tabla en Oracle
Fernando,
1) Están mal indicados los campos a utilizar. Has de utilizar el DataSet
directamente.
COLUMN OF oReport ;
TITLE "Código" ;
DATA ::odbBrowse1:Pais ;
ALIGN taLEFT ;
CHARSIZE 10
Cambialo por:
COLUMN OF oReport ;
TITLE "Código" ;
DATA ::oDataSet1:Pais ;
ALIGN taLEFT ;
CHARSIZE 10
2) Faltan estas dos líneas antes de lanzar el report
WITH OBJECT oReport
:bWhile := {|| !::oDataSet1:Eof() }
:bSkip := {|| ::oDataSet1:Skip() }
END WITH
Por último, y como recomendación, te recomiendo ya que veo que tienes un
Browse activo al mismo tiempo que imprimes, que hagas un clon (método Clone)
del dataset y utilices ese clón para imprimir. Esto es necesario ya que es
posible que el Browse necesite repintarse y en dicho caso te va a cambiar el
Recno dentro del DataSet lo cual te puede producir efectos catastróficos en
tu informe.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=45ad4c45@news.xailer.com...]45ad4c45@news.xailer.com...[/email]
> Buenas Tardes por aca
>
> Estoy tratando de imprimir un reporte tipo listado usando una base de
> datos en Oracle, la conexion es por ADO. Ya trate de mil formas, pero lo
> unico que me logra imprimir son los encabezados y no la informacion de los
> registros.
>
> Que podria estar haciendo mal
>
> Adjunto parte del codigo y gracias por la ayuda.
>
> Saludos
>
> //---------------------------------------------
> METHOD Reporte( lPreview )
>
> LOCAL oReport,clpreview, oFont1, oFont2
>
> FIELD pais, descripcion
>
> ::oSqlTable1:SaveState( .T. )
> ::oSqlTable1:GoTop()
>
> With Object oFont1 := TFont():New()
> :cName := "Arial"
> :nSize := 12
> :lBold := .T.
> END WITH
>
> With Object oFont2 := TFont():New()
> :cName := "Arial"
> :nSize := 10
> :lBold := .f.
> END WITH
>
> if lPreview
> REPORT oReport TITLE "Listado de Paises" ;
> HEADER DtoC( Date() ) + " " + Time() ;
> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
> JOBNAME "PCventa - Listado de Paises" ;
> PREVIEW MODAL ;
> FONT oFont1, oFont2
> Else
> REPORT oReport TITLE "Listado de Paises" ;
> HEADER DtoC( Date() ) + " " + Time() ;
> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
> JOBNAME "PCventa - Listado de Paises" ;
> FONT oFont1, oFont2
> Endif
>
>
> COLUMN OF oReport ;
> TITLE "Código" ;
> DATA ::odbBrowse1:Pais ;
> ALIGN taLEFT ;
> CHARSIZE 10
>
> COLUMN OF oReport ;
> TITLE "Nombre" ;
> DATA ::odbBrowse1:Descripcion ;
> ALIGN taLEFT ;
> CHARSIZE 10
>
> RUN REPORT oReport
>
> oFont1:Destroy()
> oFont2:Destroy()
>
> ::oSqlTable1:RestoreState( .T. )
>
> Return NIL
> //---------------------------------------------
>
>
1) Están mal indicados los campos a utilizar. Has de utilizar el DataSet
directamente.
COLUMN OF oReport ;
TITLE "Código" ;
DATA ::odbBrowse1:Pais ;
ALIGN taLEFT ;
CHARSIZE 10
Cambialo por:
COLUMN OF oReport ;
TITLE "Código" ;
DATA ::oDataSet1:Pais ;
ALIGN taLEFT ;
CHARSIZE 10
2) Faltan estas dos líneas antes de lanzar el report
WITH OBJECT oReport
:bWhile := {|| !::oDataSet1:Eof() }
:bSkip := {|| ::oDataSet1:Skip() }
END WITH
Por último, y como recomendación, te recomiendo ya que veo que tienes un
Browse activo al mismo tiempo que imprimes, que hagas un clon (método Clone)
del dataset y utilices ese clón para imprimir. Esto es necesario ya que es
posible que el Browse necesite repintarse y en dicho caso te va a cambiar el
Recno dentro del DataSet lo cual te puede producir efectos catastróficos en
tu informe.
Un saludo,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=45ad4c45@news.xailer.com...]45ad4c45@news.xailer.com...[/email]
> Buenas Tardes por aca
>
> Estoy tratando de imprimir un reporte tipo listado usando una base de
> datos en Oracle, la conexion es por ADO. Ya trate de mil formas, pero lo
> unico que me logra imprimir son los encabezados y no la informacion de los
> registros.
>
> Que podria estar haciendo mal
>
> Adjunto parte del codigo y gracias por la ayuda.
>
> Saludos
>
> //---------------------------------------------
> METHOD Reporte( lPreview )
>
> LOCAL oReport,clpreview, oFont1, oFont2
>
> FIELD pais, descripcion
>
> ::oSqlTable1:SaveState( .T. )
> ::oSqlTable1:GoTop()
>
> With Object oFont1 := TFont():New()
> :cName := "Arial"
> :nSize := 12
> :lBold := .T.
> END WITH
>
> With Object oFont2 := TFont():New()
> :cName := "Arial"
> :nSize := 10
> :lBold := .f.
> END WITH
>
> if lPreview
> REPORT oReport TITLE "Listado de Paises" ;
> HEADER DtoC( Date() ) + " " + Time() ;
> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
> JOBNAME "PCventa - Listado de Paises" ;
> PREVIEW MODAL ;
> FONT oFont1, oFont2
> Else
> REPORT oReport TITLE "Listado de Paises" ;
> HEADER DtoC( Date() ) + " " + Time() ;
> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
> JOBNAME "PCventa - Listado de Paises" ;
> FONT oFont1, oFont2
> Endif
>
>
> COLUMN OF oReport ;
> TITLE "Código" ;
> DATA ::odbBrowse1:Pais ;
> ALIGN taLEFT ;
> CHARSIZE 10
>
> COLUMN OF oReport ;
> TITLE "Nombre" ;
> DATA ::odbBrowse1:Descripcion ;
> ALIGN taLEFT ;
> CHARSIZE 10
>
> RUN REPORT oReport
>
> oFont1:Destroy()
> oFont2:Destroy()
>
> ::oSqlTable1:RestoreState( .T. )
>
> Return NIL
> //---------------------------------------------
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
-
- Mensajes: 113
- Registrado: Lun Nov 13, 2006 5:29 am
Imprimir Reporte de una Tabla en Oracle
Solucionado,
Gracias por la Ayuda y Saludos.
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:45ade0e7$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Fernando,
>
> 1) Están mal indicados los campos a utilizar. Has de utilizar el DataSet
> directamente.
>
> COLUMN OF oReport ;
> TITLE "Código" ;
> DATA ::odbBrowse1:Pais ;
> ALIGN taLEFT ;
> CHARSIZE 10
>
> Cambialo por:
>
> COLUMN OF oReport ;
> TITLE "Código" ;
> DATA ::oDataSet1:Pais ;
> ALIGN taLEFT ;
> CHARSIZE 10
>
> 2) Faltan estas dos líneas antes de lanzar el report
>
> WITH OBJECT oReport
> :bWhile := {|| !::oDataSet1:Eof() }
> :bSkip := {|| ::oDataSet1:Skip() }
> END WITH
>
> Por último, y como recomendación, te recomiendo ya que veo que tienes un
> Browse activo al mismo tiempo que imprimes, que hagas un clon (método
> Clone) del dataset y utilices ese clón para imprimir. Esto es necesario ya
> que es posible que el Browse necesite repintarse y en dicho caso te va a
> cambiar el Recno dentro del DataSet lo cual te puede producir efectos
> catastróficos en tu informe.
>
> Un saludo,
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
>
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=45ad4c45@news.xailer.com...]45ad4c45@news.xailer.com...[/email]
>> Buenas Tardes por aca
>>
>> Estoy tratando de imprimir un reporte tipo listado usando una base de
>> datos en Oracle, la conexion es por ADO. Ya trate de mil formas, pero lo
>> unico que me logra imprimir son los encabezados y no la informacion de
>> los registros.
>>
>> Que podria estar haciendo mal
>>
>> Adjunto parte del codigo y gracias por la ayuda.
>>
>> Saludos
>>
>> //---------------------------------------------
>> METHOD Reporte( lPreview )
>>
>> LOCAL oReport,clpreview, oFont1, oFont2
>>
>> FIELD pais, descripcion
>>
>> ::oSqlTable1:SaveState( .T. )
>> ::oSqlTable1:GoTop()
>>
>> With Object oFont1 := TFont():New()
>> :cName := "Arial"
>> :nSize := 12
>> :lBold := .T.
>> END WITH
>>
>> With Object oFont2 := TFont():New()
>> :cName := "Arial"
>> :nSize := 10
>> :lBold := .f.
>> END WITH
>>
>> if lPreview
>> REPORT oReport TITLE "Listado de Paises" ;
>> HEADER DtoC( Date() ) + " " + Time() ;
>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>> JOBNAME "PCventa - Listado de Paises" ;
>> PREVIEW MODAL ;
>> FONT oFont1, oFont2
>> Else
>> REPORT oReport TITLE "Listado de Paises" ;
>> HEADER DtoC( Date() ) + " " + Time() ;
>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>> JOBNAME "PCventa - Listado de Paises" ;
>> FONT oFont1, oFont2
>> Endif
>>
>>
>> COLUMN OF oReport ;
>> TITLE "Código" ;
>> DATA ::odbBrowse1:Pais ;
>> ALIGN taLEFT ;
>> CHARSIZE 10
>>
>> COLUMN OF oReport ;
>> TITLE "Nombre" ;
>> DATA ::odbBrowse1:Descripcion ;
>> ALIGN taLEFT ;
>> CHARSIZE 10
>>
>> RUN REPORT oReport
>>
>> oFont1:Destroy()
>> oFont2:Destroy()
>>
>> ::oSqlTable1:RestoreState( .T. )
>>
>> Return NIL
>> //---------------------------------------------
>>
>>
>
>
Gracias por la Ayuda y Saludos.
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:45ade0e7$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Fernando,
>
> 1) Están mal indicados los campos a utilizar. Has de utilizar el DataSet
> directamente.
>
> COLUMN OF oReport ;
> TITLE "Código" ;
> DATA ::odbBrowse1:Pais ;
> ALIGN taLEFT ;
> CHARSIZE 10
>
> Cambialo por:
>
> COLUMN OF oReport ;
> TITLE "Código" ;
> DATA ::oDataSet1:Pais ;
> ALIGN taLEFT ;
> CHARSIZE 10
>
> 2) Faltan estas dos líneas antes de lanzar el report
>
> WITH OBJECT oReport
> :bWhile := {|| !::oDataSet1:Eof() }
> :bSkip := {|| ::oDataSet1:Skip() }
> END WITH
>
> Por último, y como recomendación, te recomiendo ya que veo que tienes un
> Browse activo al mismo tiempo que imprimes, que hagas un clon (método
> Clone) del dataset y utilices ese clón para imprimir. Esto es necesario ya
> que es posible que el Browse necesite repintarse y en dicho caso te va a
> cambiar el Recno dentro del DataSet lo cual te puede producir efectos
> catastróficos en tu informe.
>
> Un saludo,
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
>
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=45ad4c45@news.xailer.com...]45ad4c45@news.xailer.com...[/email]
>> Buenas Tardes por aca
>>
>> Estoy tratando de imprimir un reporte tipo listado usando una base de
>> datos en Oracle, la conexion es por ADO. Ya trate de mil formas, pero lo
>> unico que me logra imprimir son los encabezados y no la informacion de
>> los registros.
>>
>> Que podria estar haciendo mal
>>
>> Adjunto parte del codigo y gracias por la ayuda.
>>
>> Saludos
>>
>> //---------------------------------------------
>> METHOD Reporte( lPreview )
>>
>> LOCAL oReport,clpreview, oFont1, oFont2
>>
>> FIELD pais, descripcion
>>
>> ::oSqlTable1:SaveState( .T. )
>> ::oSqlTable1:GoTop()
>>
>> With Object oFont1 := TFont():New()
>> :cName := "Arial"
>> :nSize := 12
>> :lBold := .T.
>> END WITH
>>
>> With Object oFont2 := TFont():New()
>> :cName := "Arial"
>> :nSize := 10
>> :lBold := .f.
>> END WITH
>>
>> if lPreview
>> REPORT oReport TITLE "Listado de Paises" ;
>> HEADER DtoC( Date() ) + " " + Time() ;
>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>> JOBNAME "PCventa - Listado de Paises" ;
>> PREVIEW MODAL ;
>> FONT oFont1, oFont2
>> Else
>> REPORT oReport TITLE "Listado de Paises" ;
>> HEADER DtoC( Date() ) + " " + Time() ;
>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>> JOBNAME "PCventa - Listado de Paises" ;
>> FONT oFont1, oFont2
>> Endif
>>
>>
>> COLUMN OF oReport ;
>> TITLE "Código" ;
>> DATA ::odbBrowse1:Pais ;
>> ALIGN taLEFT ;
>> CHARSIZE 10
>>
>> COLUMN OF oReport ;
>> TITLE "Nombre" ;
>> DATA ::odbBrowse1:Descripcion ;
>> ALIGN taLEFT ;
>> CHARSIZE 10
>>
>> RUN REPORT oReport
>>
>> oFont1:Destroy()
>> oFont2:Destroy()
>>
>> ::oSqlTable1:RestoreState( .T. )
>>
>> Return NIL
>> //---------------------------------------------
>>
>>
>
>
-
- Mensajes: 113
- Registrado: Lun Nov 13, 2006 5:29 am
Imprimir Reporte de una Tabla en Oracle
Ok, me funciono la primera vez con el orden en que abre el Dataset,
pero si luego en el TDBBROWSE cambio el orden de visualizacion y vuelvo a
generar el reporte me da el siguiente error.
ADOBD:Recordset:nSkip(1) [#0]
En Procedimiento: TDBBROWSE:skip Linea:189
Sin embargo, al final me genera el reporte, no sin antes mostrarme el error
3 o 4 veces.
Lo quese me esta ocurriendo es usar la funcion Keycount() y hacer un While<=
keycount().
Quedo a espera de sus comentarios,
Saludos
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=45ae35d7@news.xailer.com...]45ae35d7@news.xailer.com...[/email]
> Solucionado,
>
> Gracias por la Ayuda y Saludos.
>
>
> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
> news:45ade0e7$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Fernando,
>>
>> 1) Están mal indicados los campos a utilizar. Has de utilizar el DataSet
>> directamente.
>>
>> COLUMN OF oReport ;
>> TITLE "Código" ;
>> DATA ::odbBrowse1:Pais ;
>> ALIGN taLEFT ;
>> CHARSIZE 10
>>
>> Cambialo por:
>>
>> COLUMN OF oReport ;
>> TITLE "Código" ;
>> DATA ::oDataSet1:Pais ;
>> ALIGN taLEFT ;
>> CHARSIZE 10
>>
>> 2) Faltan estas dos líneas antes de lanzar el report
>>
>> WITH OBJECT oReport
>> :bWhile := {|| !::oDataSet1:Eof() }
>> :bSkip := {|| ::oDataSet1:Skip() }
>> END WITH
>>
>> Por último, y como recomendación, te recomiendo ya que veo que tienes un
>> Browse activo al mismo tiempo que imprimes, que hagas un clon (método
>> Clone) del dataset y utilices ese clón para imprimir. Esto es necesario
>> ya que es posible que el Browse necesite repintarse y en dicho caso te va
>> a cambiar el Recno dentro del DataSet lo cual te puede producir efectos
>> catastróficos en tu informe.
>>
>> Un saludo,
>>
>> --
>> Ignacio Ortiz de Zúñiga
>> http://www.xailer.com
>>
>>
>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>> news:[email=45ad4c45@news.xailer.com...]45ad4c45@news.xailer.com...[/email]
>>> Buenas Tardes por aca
>>>
>>> Estoy tratando de imprimir un reporte tipo listado usando una base de
>>> datos en Oracle, la conexion es por ADO. Ya trate de mil formas, pero lo
>>> unico que me logra imprimir son los encabezados y no la informacion de
>>> los registros.
>>>
>>> Que podria estar haciendo mal
>>>
>>> Adjunto parte del codigo y gracias por la ayuda.
>>>
>>> Saludos
>>>
>>> //---------------------------------------------
>>> METHOD Reporte( lPreview )
>>>
>>> LOCAL oReport,clpreview, oFont1, oFont2
>>>
>>> FIELD pais, descripcion
>>>
>>> ::oSqlTable1:SaveState( .T. )
>>> ::oSqlTable1:GoTop()
>>>
>>> With Object oFont1 := TFont():New()
>>> :cName := "Arial"
>>> :nSize := 12
>>> :lBold := .T.
>>> END WITH
>>>
>>> With Object oFont2 := TFont():New()
>>> :cName := "Arial"
>>> :nSize := 10
>>> :lBold := .f.
>>> END WITH
>>>
>>> if lPreview
>>> REPORT oReport TITLE "Listado de Paises" ;
>>> HEADER DtoC( Date() ) + " " + Time() ;
>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>> JOBNAME "PCventa - Listado de Paises" ;
>>> PREVIEW MODAL ;
>>> FONT oFont1, oFont2
>>> Else
>>> REPORT oReport TITLE "Listado de Paises" ;
>>> HEADER DtoC( Date() ) + " " + Time() ;
>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>> JOBNAME "PCventa - Listado de Paises" ;
>>> FONT oFont1, oFont2
>>> Endif
>>>
>>>
>>> COLUMN OF oReport ;
>>> TITLE "Código" ;
>>> DATA ::odbBrowse1:Pais ;
>>> ALIGN taLEFT ;
>>> CHARSIZE 10
>>>
>>> COLUMN OF oReport ;
>>> TITLE "Nombre" ;
>>> DATA ::odbBrowse1:Descripcion ;
>>> ALIGN taLEFT ;
>>> CHARSIZE 10
>>>
>>> RUN REPORT oReport
>>>
>>> oFont1:Destroy()
>>> oFont2:Destroy()
>>>
>>> ::oSqlTable1:RestoreState( .T. )
>>>
>>> Return NIL
>>> //---------------------------------------------
>>>
>>>
>>
>>
>
>
pero si luego en el TDBBROWSE cambio el orden de visualizacion y vuelvo a
generar el reporte me da el siguiente error.
ADOBD:Recordset:nSkip(1) [#0]
En Procedimiento: TDBBROWSE:skip Linea:189
Sin embargo, al final me genera el reporte, no sin antes mostrarme el error
3 o 4 veces.
Lo quese me esta ocurriendo es usar la funcion Keycount() y hacer un While<=
keycount().
Quedo a espera de sus comentarios,
Saludos
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=45ae35d7@news.xailer.com...]45ae35d7@news.xailer.com...[/email]
> Solucionado,
>
> Gracias por la Ayuda y Saludos.
>
>
> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
> news:45ade0e7$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Fernando,
>>
>> 1) Están mal indicados los campos a utilizar. Has de utilizar el DataSet
>> directamente.
>>
>> COLUMN OF oReport ;
>> TITLE "Código" ;
>> DATA ::odbBrowse1:Pais ;
>> ALIGN taLEFT ;
>> CHARSIZE 10
>>
>> Cambialo por:
>>
>> COLUMN OF oReport ;
>> TITLE "Código" ;
>> DATA ::oDataSet1:Pais ;
>> ALIGN taLEFT ;
>> CHARSIZE 10
>>
>> 2) Faltan estas dos líneas antes de lanzar el report
>>
>> WITH OBJECT oReport
>> :bWhile := {|| !::oDataSet1:Eof() }
>> :bSkip := {|| ::oDataSet1:Skip() }
>> END WITH
>>
>> Por último, y como recomendación, te recomiendo ya que veo que tienes un
>> Browse activo al mismo tiempo que imprimes, que hagas un clon (método
>> Clone) del dataset y utilices ese clón para imprimir. Esto es necesario
>> ya que es posible que el Browse necesite repintarse y en dicho caso te va
>> a cambiar el Recno dentro del DataSet lo cual te puede producir efectos
>> catastróficos en tu informe.
>>
>> Un saludo,
>>
>> --
>> Ignacio Ortiz de Zúñiga
>> http://www.xailer.com
>>
>>
>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>> news:[email=45ad4c45@news.xailer.com...]45ad4c45@news.xailer.com...[/email]
>>> Buenas Tardes por aca
>>>
>>> Estoy tratando de imprimir un reporte tipo listado usando una base de
>>> datos en Oracle, la conexion es por ADO. Ya trate de mil formas, pero lo
>>> unico que me logra imprimir son los encabezados y no la informacion de
>>> los registros.
>>>
>>> Que podria estar haciendo mal
>>>
>>> Adjunto parte del codigo y gracias por la ayuda.
>>>
>>> Saludos
>>>
>>> //---------------------------------------------
>>> METHOD Reporte( lPreview )
>>>
>>> LOCAL oReport,clpreview, oFont1, oFont2
>>>
>>> FIELD pais, descripcion
>>>
>>> ::oSqlTable1:SaveState( .T. )
>>> ::oSqlTable1:GoTop()
>>>
>>> With Object oFont1 := TFont():New()
>>> :cName := "Arial"
>>> :nSize := 12
>>> :lBold := .T.
>>> END WITH
>>>
>>> With Object oFont2 := TFont():New()
>>> :cName := "Arial"
>>> :nSize := 10
>>> :lBold := .f.
>>> END WITH
>>>
>>> if lPreview
>>> REPORT oReport TITLE "Listado de Paises" ;
>>> HEADER DtoC( Date() ) + " " + Time() ;
>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>> JOBNAME "PCventa - Listado de Paises" ;
>>> PREVIEW MODAL ;
>>> FONT oFont1, oFont2
>>> Else
>>> REPORT oReport TITLE "Listado de Paises" ;
>>> HEADER DtoC( Date() ) + " " + Time() ;
>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>> JOBNAME "PCventa - Listado de Paises" ;
>>> FONT oFont1, oFont2
>>> Endif
>>>
>>>
>>> COLUMN OF oReport ;
>>> TITLE "Código" ;
>>> DATA ::odbBrowse1:Pais ;
>>> ALIGN taLEFT ;
>>> CHARSIZE 10
>>>
>>> COLUMN OF oReport ;
>>> TITLE "Nombre" ;
>>> DATA ::odbBrowse1:Descripcion ;
>>> ALIGN taLEFT ;
>>> CHARSIZE 10
>>>
>>> RUN REPORT oReport
>>>
>>> oFont1:Destroy()
>>> oFont2:Destroy()
>>>
>>> ::oSqlTable1:RestoreState( .T. )
>>>
>>> Return NIL
>>> //---------------------------------------------
>>>
>>>
>>
>>
>
>
-
- Mensajes: 113
- Registrado: Lun Nov 13, 2006 5:29 am
Imprimir Reporte de una Tabla en Oracle
Lo que me he dado cuenta es que si luego del cambio de orde de visualizacion
ya sea (codigo pais o nombre del pais) y me coloco en cualquier fila que no
sea la 1, no me muestra el error y el reporte se genera sin problemas.
Saludos
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=45ae8054@news.xailer.com...]45ae8054@news.xailer.com...[/email]
> Ok, me funciono la primera vez con el orden en que abre el Dataset,
> pero si luego en el TDBBROWSE cambio el orden de visualizacion y vuelvo a
> generar el reporte me da el siguiente error.
>
> ADOBD:Recordset:nSkip(1) [#0]
> En Procedimiento: TDBBROWSE:skip Linea:189
>
> Sin embargo, al final me genera el reporte, no sin antes mostrarme el
> error 3 o 4 veces.
>
> Lo quese me esta ocurriendo es usar la funcion Keycount() y hacer un
> While<= keycount().
>
> Quedo a espera de sus comentarios,
>
> Saludos
>
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=45ae35d7@news.xailer.com...]45ae35d7@news.xailer.com...[/email]
>> Solucionado,
>>
>> Gracias por la Ayuda y Saludos.
>>
>>
>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>> news:45ade0e7$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>>> Fernando,
>>>
>>> 1) Están mal indicados los campos a utilizar. Has de utilizar el DataSet
>>> directamente.
>>>
>>> COLUMN OF oReport ;
>>> TITLE "Código" ;
>>> DATA ::odbBrowse1:Pais ;
>>> ALIGN taLEFT ;
>>> CHARSIZE 10
>>>
>>> Cambialo por:
>>>
>>> COLUMN OF oReport ;
>>> TITLE "Código" ;
>>> DATA ::oDataSet1:Pais ;
>>> ALIGN taLEFT ;
>>> CHARSIZE 10
>>>
>>> 2) Faltan estas dos líneas antes de lanzar el report
>>>
>>> WITH OBJECT oReport
>>> :bWhile := {|| !::oDataSet1:Eof() }
>>> :bSkip := {|| ::oDataSet1:Skip() }
>>> END WITH
>>>
>>> Por último, y como recomendación, te recomiendo ya que veo que tienes un
>>> Browse activo al mismo tiempo que imprimes, que hagas un clon (método
>>> Clone) del dataset y utilices ese clón para imprimir. Esto es necesario
>>> ya que es posible que el Browse necesite repintarse y en dicho caso te
>>> va a cambiar el Recno dentro del DataSet lo cual te puede producir
>>> efectos catastróficos en tu informe.
>>>
>>> Un saludo,
>>>
>>> --
>>> Ignacio Ortiz de Zúñiga
>>> http://www.xailer.com
>>>
>>>
>>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>>> news:[email=45ad4c45@news.xailer.com...]45ad4c45@news.xailer.com...[/email]
>>>> Buenas Tardes por aca
>>>>
>>>> Estoy tratando de imprimir un reporte tipo listado usando una base de
>>>> datos en Oracle, la conexion es por ADO. Ya trate de mil formas, pero
>>>> lo unico que me logra imprimir son los encabezados y no la informacion
>>>> de los registros.
>>>>
>>>> Que podria estar haciendo mal
>>>>
>>>> Adjunto parte del codigo y gracias por la ayuda.
>>>>
>>>> Saludos
>>>>
>>>> //---------------------------------------------
>>>> METHOD Reporte( lPreview )
>>>>
>>>> LOCAL oReport,clpreview, oFont1, oFont2
>>>>
>>>> FIELD pais, descripcion
>>>>
>>>> ::oSqlTable1:SaveState( .T. )
>>>> ::oSqlTable1:GoTop()
>>>>
>>>> With Object oFont1 := TFont():New()
>>>> :cName := "Arial"
>>>> :nSize := 12
>>>> :lBold := .T.
>>>> END WITH
>>>>
>>>> With Object oFont2 := TFont():New()
>>>> :cName := "Arial"
>>>> :nSize := 10
>>>> :lBold := .f.
>>>> END WITH
>>>>
>>>> if lPreview
>>>> REPORT oReport TITLE "Listado de Paises" ;
>>>> HEADER DtoC( Date() ) + " " + Time() ;
>>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>>> JOBNAME "PCventa - Listado de Paises" ;
>>>> PREVIEW MODAL ;
>>>> FONT oFont1, oFont2
>>>> Else
>>>> REPORT oReport TITLE "Listado de Paises" ;
>>>> HEADER DtoC( Date() ) + " " + Time() ;
>>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>>> JOBNAME "PCventa - Listado de Paises" ;
>>>> FONT oFont1, oFont2
>>>> Endif
>>>>
>>>>
>>>> COLUMN OF oReport ;
>>>> TITLE "Código" ;
>>>> DATA ::odbBrowse1:Pais ;
>>>> ALIGN taLEFT ;
>>>> CHARSIZE 10
>>>>
>>>> COLUMN OF oReport ;
>>>> TITLE "Nombre" ;
>>>> DATA ::odbBrowse1:Descripcion ;
>>>> ALIGN taLEFT ;
>>>> CHARSIZE 10
>>>>
>>>> RUN REPORT oReport
>>>>
>>>> oFont1:Destroy()
>>>> oFont2:Destroy()
>>>>
>>>> ::oSqlTable1:RestoreState( .T. )
>>>>
>>>> Return NIL
>>>> //---------------------------------------------
>>>>
>>>>
>>>
>>>
>>
>>
>
>
ya sea (codigo pais o nombre del pais) y me coloco en cualquier fila que no
sea la 1, no me muestra el error y el reporte se genera sin problemas.
Saludos
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=45ae8054@news.xailer.com...]45ae8054@news.xailer.com...[/email]
> Ok, me funciono la primera vez con el orden en que abre el Dataset,
> pero si luego en el TDBBROWSE cambio el orden de visualizacion y vuelvo a
> generar el reporte me da el siguiente error.
>
> ADOBD:Recordset:nSkip(1) [#0]
> En Procedimiento: TDBBROWSE:skip Linea:189
>
> Sin embargo, al final me genera el reporte, no sin antes mostrarme el
> error 3 o 4 veces.
>
> Lo quese me esta ocurriendo es usar la funcion Keycount() y hacer un
> While<= keycount().
>
> Quedo a espera de sus comentarios,
>
> Saludos
>
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=45ae35d7@news.xailer.com...]45ae35d7@news.xailer.com...[/email]
>> Solucionado,
>>
>> Gracias por la Ayuda y Saludos.
>>
>>
>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>> news:45ade0e7$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>>> Fernando,
>>>
>>> 1) Están mal indicados los campos a utilizar. Has de utilizar el DataSet
>>> directamente.
>>>
>>> COLUMN OF oReport ;
>>> TITLE "Código" ;
>>> DATA ::odbBrowse1:Pais ;
>>> ALIGN taLEFT ;
>>> CHARSIZE 10
>>>
>>> Cambialo por:
>>>
>>> COLUMN OF oReport ;
>>> TITLE "Código" ;
>>> DATA ::oDataSet1:Pais ;
>>> ALIGN taLEFT ;
>>> CHARSIZE 10
>>>
>>> 2) Faltan estas dos líneas antes de lanzar el report
>>>
>>> WITH OBJECT oReport
>>> :bWhile := {|| !::oDataSet1:Eof() }
>>> :bSkip := {|| ::oDataSet1:Skip() }
>>> END WITH
>>>
>>> Por último, y como recomendación, te recomiendo ya que veo que tienes un
>>> Browse activo al mismo tiempo que imprimes, que hagas un clon (método
>>> Clone) del dataset y utilices ese clón para imprimir. Esto es necesario
>>> ya que es posible que el Browse necesite repintarse y en dicho caso te
>>> va a cambiar el Recno dentro del DataSet lo cual te puede producir
>>> efectos catastróficos en tu informe.
>>>
>>> Un saludo,
>>>
>>> --
>>> Ignacio Ortiz de Zúñiga
>>> http://www.xailer.com
>>>
>>>
>>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>>> news:[email=45ad4c45@news.xailer.com...]45ad4c45@news.xailer.com...[/email]
>>>> Buenas Tardes por aca
>>>>
>>>> Estoy tratando de imprimir un reporte tipo listado usando una base de
>>>> datos en Oracle, la conexion es por ADO. Ya trate de mil formas, pero
>>>> lo unico que me logra imprimir son los encabezados y no la informacion
>>>> de los registros.
>>>>
>>>> Que podria estar haciendo mal
>>>>
>>>> Adjunto parte del codigo y gracias por la ayuda.
>>>>
>>>> Saludos
>>>>
>>>> //---------------------------------------------
>>>> METHOD Reporte( lPreview )
>>>>
>>>> LOCAL oReport,clpreview, oFont1, oFont2
>>>>
>>>> FIELD pais, descripcion
>>>>
>>>> ::oSqlTable1:SaveState( .T. )
>>>> ::oSqlTable1:GoTop()
>>>>
>>>> With Object oFont1 := TFont():New()
>>>> :cName := "Arial"
>>>> :nSize := 12
>>>> :lBold := .T.
>>>> END WITH
>>>>
>>>> With Object oFont2 := TFont():New()
>>>> :cName := "Arial"
>>>> :nSize := 10
>>>> :lBold := .f.
>>>> END WITH
>>>>
>>>> if lPreview
>>>> REPORT oReport TITLE "Listado de Paises" ;
>>>> HEADER DtoC( Date() ) + " " + Time() ;
>>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>>> JOBNAME "PCventa - Listado de Paises" ;
>>>> PREVIEW MODAL ;
>>>> FONT oFont1, oFont2
>>>> Else
>>>> REPORT oReport TITLE "Listado de Paises" ;
>>>> HEADER DtoC( Date() ) + " " + Time() ;
>>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>>> JOBNAME "PCventa - Listado de Paises" ;
>>>> FONT oFont1, oFont2
>>>> Endif
>>>>
>>>>
>>>> COLUMN OF oReport ;
>>>> TITLE "Código" ;
>>>> DATA ::odbBrowse1:Pais ;
>>>> ALIGN taLEFT ;
>>>> CHARSIZE 10
>>>>
>>>> COLUMN OF oReport ;
>>>> TITLE "Nombre" ;
>>>> DATA ::odbBrowse1:Descripcion ;
>>>> ALIGN taLEFT ;
>>>> CHARSIZE 10
>>>>
>>>> RUN REPORT oReport
>>>>
>>>> oFont1:Destroy()
>>>> oFont2:Destroy()
>>>>
>>>> ::oSqlTable1:RestoreState( .T. )
>>>>
>>>> Return NIL
>>>> //---------------------------------------------
>>>>
>>>>
>>>
>>>
>>
>>
>
>
- ignacio
- Site Admin
- Mensajes: 9457
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Imprimir Reporte de una Tabla en Oracle
Fernando,
Sin un ejemplo me es imposible saber que le puede estar pasando. No
obstante:
1) Utilice un dataset clonado (método Clone) para la impresión como le dije
2) Sino hace caso al punto (1) al menos guarde y restaure el estado del
dataset con los metodos SaveState y RestoreState
3) Utilice como expresión de bucle While !Ado:Eof()
Saludos,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=45ae8054@news.xailer.com...]45ae8054@news.xailer.com...[/email]
> Ok, me funciono la primera vez con el orden en que abre el Dataset,
> pero si luego en el TDBBROWSE cambio el orden de visualizacion y vuelvo a
> generar el reporte me da el siguiente error.
>
> ADOBD:Recordset:nSkip(1) [#0]
> En Procedimiento: TDBBROWSE:skip Linea:189
>
> Sin embargo, al final me genera el reporte, no sin antes mostrarme el
> error 3 o 4 veces.
>
> Lo quese me esta ocurriendo es usar la funcion Keycount() y hacer un
> While<= keycount().
>
> Quedo a espera de sus comentarios,
>
> Saludos
>
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=45ae35d7@news.xailer.com...]45ae35d7@news.xailer.com...[/email]
>> Solucionado,
>>
>> Gracias por la Ayuda y Saludos.
>>
>>
>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>> news:45ade0e7$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>>> Fernando,
>>>
>>> 1) Están mal indicados los campos a utilizar. Has de utilizar el DataSet
>>> directamente.
>>>
>>> COLUMN OF oReport ;
>>> TITLE "Código" ;
>>> DATA ::odbBrowse1:Pais ;
>>> ALIGN taLEFT ;
>>> CHARSIZE 10
>>>
>>> Cambialo por:
>>>
>>> COLUMN OF oReport ;
>>> TITLE "Código" ;
>>> DATA ::oDataSet1:Pais ;
>>> ALIGN taLEFT ;
>>> CHARSIZE 10
>>>
>>> 2) Faltan estas dos líneas antes de lanzar el report
>>>
>>> WITH OBJECT oReport
>>> :bWhile := {|| !::oDataSet1:Eof() }
>>> :bSkip := {|| ::oDataSet1:Skip() }
>>> END WITH
>>>
>>> Por último, y como recomendación, te recomiendo ya que veo que tienes un
>>> Browse activo al mismo tiempo que imprimes, que hagas un clon (método
>>> Clone) del dataset y utilices ese clón para imprimir. Esto es necesario
>>> ya que es posible que el Browse necesite repintarse y en dicho caso te
>>> va a cambiar el Recno dentro del DataSet lo cual te puede producir
>>> efectos catastróficos en tu informe.
>>>
>>> Un saludo,
>>>
>>> --
>>> Ignacio Ortiz de Zúñiga
>>> http://www.xailer.com
>>>
>>>
>>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>>> news:[email=45ad4c45@news.xailer.com...]45ad4c45@news.xailer.com...[/email]
>>>> Buenas Tardes por aca
>>>>
>>>> Estoy tratando de imprimir un reporte tipo listado usando una base de
>>>> datos en Oracle, la conexion es por ADO. Ya trate de mil formas, pero
>>>> lo unico que me logra imprimir son los encabezados y no la informacion
>>>> de los registros.
>>>>
>>>> Que podria estar haciendo mal
>>>>
>>>> Adjunto parte del codigo y gracias por la ayuda.
>>>>
>>>> Saludos
>>>>
>>>> //---------------------------------------------
>>>> METHOD Reporte( lPreview )
>>>>
>>>> LOCAL oReport,clpreview, oFont1, oFont2
>>>>
>>>> FIELD pais, descripcion
>>>>
>>>> ::oSqlTable1:SaveState( .T. )
>>>> ::oSqlTable1:GoTop()
>>>>
>>>> With Object oFont1 := TFont():New()
>>>> :cName := "Arial"
>>>> :nSize := 12
>>>> :lBold := .T.
>>>> END WITH
>>>>
>>>> With Object oFont2 := TFont():New()
>>>> :cName := "Arial"
>>>> :nSize := 10
>>>> :lBold := .f.
>>>> END WITH
>>>>
>>>> if lPreview
>>>> REPORT oReport TITLE "Listado de Paises" ;
>>>> HEADER DtoC( Date() ) + " " + Time() ;
>>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>>> JOBNAME "PCventa - Listado de Paises" ;
>>>> PREVIEW MODAL ;
>>>> FONT oFont1, oFont2
>>>> Else
>>>> REPORT oReport TITLE "Listado de Paises" ;
>>>> HEADER DtoC( Date() ) + " " + Time() ;
>>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>>> JOBNAME "PCventa - Listado de Paises" ;
>>>> FONT oFont1, oFont2
>>>> Endif
>>>>
>>>>
>>>> COLUMN OF oReport ;
>>>> TITLE "Código" ;
>>>> DATA ::odbBrowse1:Pais ;
>>>> ALIGN taLEFT ;
>>>> CHARSIZE 10
>>>>
>>>> COLUMN OF oReport ;
>>>> TITLE "Nombre" ;
>>>> DATA ::odbBrowse1:Descripcion ;
>>>> ALIGN taLEFT ;
>>>> CHARSIZE 10
>>>>
>>>> RUN REPORT oReport
>>>>
>>>> oFont1:Destroy()
>>>> oFont2:Destroy()
>>>>
>>>> ::oSqlTable1:RestoreState( .T. )
>>>>
>>>> Return NIL
>>>> //---------------------------------------------
>>>>
>>>>
>>>
>>>
>>
>>
>
>
Sin un ejemplo me es imposible saber que le puede estar pasando. No
obstante:
1) Utilice un dataset clonado (método Clone) para la impresión como le dije
2) Sino hace caso al punto (1) al menos guarde y restaure el estado del
dataset con los metodos SaveState y RestoreState
3) Utilice como expresión de bucle While !Ado:Eof()
Saludos,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=45ae8054@news.xailer.com...]45ae8054@news.xailer.com...[/email]
> Ok, me funciono la primera vez con el orden en que abre el Dataset,
> pero si luego en el TDBBROWSE cambio el orden de visualizacion y vuelvo a
> generar el reporte me da el siguiente error.
>
> ADOBD:Recordset:nSkip(1) [#0]
> En Procedimiento: TDBBROWSE:skip Linea:189
>
> Sin embargo, al final me genera el reporte, no sin antes mostrarme el
> error 3 o 4 veces.
>
> Lo quese me esta ocurriendo es usar la funcion Keycount() y hacer un
> While<= keycount().
>
> Quedo a espera de sus comentarios,
>
> Saludos
>
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=45ae35d7@news.xailer.com...]45ae35d7@news.xailer.com...[/email]
>> Solucionado,
>>
>> Gracias por la Ayuda y Saludos.
>>
>>
>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>> news:45ade0e7$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>>> Fernando,
>>>
>>> 1) Están mal indicados los campos a utilizar. Has de utilizar el DataSet
>>> directamente.
>>>
>>> COLUMN OF oReport ;
>>> TITLE "Código" ;
>>> DATA ::odbBrowse1:Pais ;
>>> ALIGN taLEFT ;
>>> CHARSIZE 10
>>>
>>> Cambialo por:
>>>
>>> COLUMN OF oReport ;
>>> TITLE "Código" ;
>>> DATA ::oDataSet1:Pais ;
>>> ALIGN taLEFT ;
>>> CHARSIZE 10
>>>
>>> 2) Faltan estas dos líneas antes de lanzar el report
>>>
>>> WITH OBJECT oReport
>>> :bWhile := {|| !::oDataSet1:Eof() }
>>> :bSkip := {|| ::oDataSet1:Skip() }
>>> END WITH
>>>
>>> Por último, y como recomendación, te recomiendo ya que veo que tienes un
>>> Browse activo al mismo tiempo que imprimes, que hagas un clon (método
>>> Clone) del dataset y utilices ese clón para imprimir. Esto es necesario
>>> ya que es posible que el Browse necesite repintarse y en dicho caso te
>>> va a cambiar el Recno dentro del DataSet lo cual te puede producir
>>> efectos catastróficos en tu informe.
>>>
>>> Un saludo,
>>>
>>> --
>>> Ignacio Ortiz de Zúñiga
>>> http://www.xailer.com
>>>
>>>
>>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>>> news:[email=45ad4c45@news.xailer.com...]45ad4c45@news.xailer.com...[/email]
>>>> Buenas Tardes por aca
>>>>
>>>> Estoy tratando de imprimir un reporte tipo listado usando una base de
>>>> datos en Oracle, la conexion es por ADO. Ya trate de mil formas, pero
>>>> lo unico que me logra imprimir son los encabezados y no la informacion
>>>> de los registros.
>>>>
>>>> Que podria estar haciendo mal
>>>>
>>>> Adjunto parte del codigo y gracias por la ayuda.
>>>>
>>>> Saludos
>>>>
>>>> //---------------------------------------------
>>>> METHOD Reporte( lPreview )
>>>>
>>>> LOCAL oReport,clpreview, oFont1, oFont2
>>>>
>>>> FIELD pais, descripcion
>>>>
>>>> ::oSqlTable1:SaveState( .T. )
>>>> ::oSqlTable1:GoTop()
>>>>
>>>> With Object oFont1 := TFont():New()
>>>> :cName := "Arial"
>>>> :nSize := 12
>>>> :lBold := .T.
>>>> END WITH
>>>>
>>>> With Object oFont2 := TFont():New()
>>>> :cName := "Arial"
>>>> :nSize := 10
>>>> :lBold := .f.
>>>> END WITH
>>>>
>>>> if lPreview
>>>> REPORT oReport TITLE "Listado de Paises" ;
>>>> HEADER DtoC( Date() ) + " " + Time() ;
>>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>>> JOBNAME "PCventa - Listado de Paises" ;
>>>> PREVIEW MODAL ;
>>>> FONT oFont1, oFont2
>>>> Else
>>>> REPORT oReport TITLE "Listado de Paises" ;
>>>> HEADER DtoC( Date() ) + " " + Time() ;
>>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>>> JOBNAME "PCventa - Listado de Paises" ;
>>>> FONT oFont1, oFont2
>>>> Endif
>>>>
>>>>
>>>> COLUMN OF oReport ;
>>>> TITLE "Código" ;
>>>> DATA ::odbBrowse1:Pais ;
>>>> ALIGN taLEFT ;
>>>> CHARSIZE 10
>>>>
>>>> COLUMN OF oReport ;
>>>> TITLE "Nombre" ;
>>>> DATA ::odbBrowse1:Descripcion ;
>>>> ALIGN taLEFT ;
>>>> CHARSIZE 10
>>>>
>>>> RUN REPORT oReport
>>>>
>>>> oFont1:Destroy()
>>>> oFont2:Destroy()
>>>>
>>>> ::oSqlTable1:RestoreState( .T. )
>>>>
>>>> Return NIL
>>>> //---------------------------------------------
>>>>
>>>>
>>>
>>>
>>
>>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
-
- Mensajes: 113
- Registrado: Lun Nov 13, 2006 5:29 am
Imprimir Reporte de una Tabla en Oracle
Buenos Dias
Adjunto el codigo para el Reporte.
Saludos y Gracias
//---------------------------------------------------------- ----
METHOD Listado( lPreview )
LOCAL oReport,clpreview, oFont1, oFont2, oMaxRec
FIELD pais, descripcion
::oSqlTable1:GoTop()
::oSqlTable1:Skip() // esta linea para que no quede en la primera sino
en la segunda y no me de el error
::oSqlTable1:SaveState( .T. )
With Object oFont1 := TFont():New()
:cName := "Arial"
:nSize := 12
:lBold := .T.
END WITH
With Object oFont2 := TFont():New()
:cName := "Arial"
:nSize := 10
:lBold := .f.
END WITH
if lPreview
REPORT oReport TITLE "Listado de Paises" ;
HEADER DtoC( Date() ) + " " + Time() ;
FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
JOBNAME "PCventa - Listado de Paises" ;
PREVIEW MODAL
//FONT oFont1, oFont2
Else
REPORT oReport TITLE "Listado de Paises" ;
HEADER DtoC( Date() ) + " " + Time() ;
FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
JOBNAME "PCventa - Listado de Paises"
//FONT oFont1, oFont2
Endif
COLUMN OF oReport ;
TITLE "Código" ;
DATA ::osqlTable1:pais ;
ALIGN taLEFT
COLUMN OF oReport ;
TITLE "Nombre" ;
DATA ::osqlTable1:descripcion ;
ALIGN taLEFT
WITH OBJECT oReport
:bWhile := {|| !::osqlTable1:Eof() }
:bSkip := {|| ::oSqlTable1:Skip() }
END WITH
RUN REPORT oReport
oFont1:Destroy()
oFont2:Destroy()
::oSqlTable1:RestoreState( .T. )
::osqltable1:goTop() // esta linea para que regrese a la primera despues
de la impresion
RETURN NIL
// ------------------------------------------------------------ --------------------------------------
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:45af3486$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Fernando,
>
> Sin un ejemplo me es imposible saber que le puede estar pasando. No
> obstante:
>
> 1) Utilice un dataset clonado (método Clone) para la impresión como le
> dije
>
> 2) Sino hace caso al punto (1) al menos guarde y restaure el estado del
> dataset con los metodos SaveState y RestoreState
>
> 3) Utilice como expresión de bucle While !Ado:Eof()
>
> Saludos,
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
>
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=45ae8054@news.xailer.com...]45ae8054@news.xailer.com...[/email]
>> Ok, me funciono la primera vez con el orden en que abre el Dataset,
>> pero si luego en el TDBBROWSE cambio el orden de visualizacion y vuelvo a
>> generar el reporte me da el siguiente error.
>>
>> ADOBD:Recordset:nSkip(1) [#0]
>> En Procedimiento: TDBBROWSE:skip Linea:189
>>
>> Sin embargo, al final me genera el reporte, no sin antes mostrarme el
>> error 3 o 4 veces.
>>
>> Lo quese me esta ocurriendo es usar la funcion Keycount() y hacer un
>> While<= keycount().
>>
>> Quedo a espera de sus comentarios,
>>
>> Saludos
>>
>>
>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>> news:[email=45ae35d7@news.xailer.com...]45ae35d7@news.xailer.com...[/email]
>>> Solucionado,
>>>
>>> Gracias por la Ayuda y Saludos.
>>>
>>>
>>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>>> news:45ade0e7$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>>>> Fernando,
>>>>
>>>> 1) Están mal indicados los campos a utilizar. Has de utilizar el
>>>> DataSet directamente.
>>>>
>>>> COLUMN OF oReport ;
>>>> TITLE "Código" ;
>>>> DATA ::odbBrowse1:Pais ;
>>>> ALIGN taLEFT ;
>>>> CHARSIZE 10
>>>>
>>>> Cambialo por:
>>>>
>>>> COLUMN OF oReport ;
>>>> TITLE "Código" ;
>>>> DATA ::oDataSet1:Pais ;
>>>> ALIGN taLEFT ;
>>>> CHARSIZE 10
>>>>
>>>> 2) Faltan estas dos líneas antes de lanzar el report
>>>>
>>>> WITH OBJECT oReport
>>>> :bWhile := {|| !::oDataSet1:Eof() }
>>>> :bSkip := {|| ::oDataSet1:Skip() }
>>>> END WITH
>>>>
>>>> Por último, y como recomendación, te recomiendo ya que veo que tienes
>>>> un Browse activo al mismo tiempo que imprimes, que hagas un clon
>>>> (método Clone) del dataset y utilices ese clón para imprimir. Esto es
>>>> necesario ya que es posible que el Browse necesite repintarse y en
>>>> dicho caso te va a cambiar el Recno dentro del DataSet lo cual te puede
>>>> producir efectos catastróficos en tu informe.
>>>>
>>>> Un saludo,
>>>>
>>>> --
>>>> Ignacio Ortiz de Zúñiga
>>>> http://www.xailer.com
>>>>
>>>>
>>>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>>>> news:[email=45ad4c45@news.xailer.com...]45ad4c45@news.xailer.com...[/email]
>>>>> Buenas Tardes por aca
>>>>>
>>>>> Estoy tratando de imprimir un reporte tipo listado usando una base de
>>>>> datos en Oracle, la conexion es por ADO. Ya trate de mil formas, pero
>>>>> lo unico que me logra imprimir son los encabezados y no la informacion
>>>>> de los registros.
>>>>>
>>>>> Que podria estar haciendo mal
>>>>>
>>>>> Adjunto parte del codigo y gracias por la ayuda.
>>>>>
>>>>> Saludos
>>>>>
>>>>> //---------------------------------------------
>>>>> METHOD Reporte( lPreview )
>>>>>
>>>>> LOCAL oReport,clpreview, oFont1, oFont2
>>>>>
>>>>> FIELD pais, descripcion
>>>>>
>>>>> ::oSqlTable1:SaveState( .T. )
>>>>> ::oSqlTable1:GoTop()
>>>>>
>>>>> With Object oFont1 := TFont():New()
>>>>> :cName := "Arial"
>>>>> :nSize := 12
>>>>> :lBold := .T.
>>>>> END WITH
>>>>>
>>>>> With Object oFont2 := TFont():New()
>>>>> :cName := "Arial"
>>>>> :nSize := 10
>>>>> :lBold := .f.
>>>>> END WITH
>>>>>
>>>>> if lPreview
>>>>> REPORT oReport TITLE "Listado de Paises" ;
>>>>> HEADER DtoC( Date() ) + " " + Time() ;
>>>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>>>> JOBNAME "PCventa - Listado de Paises" ;
>>>>> PREVIEW MODAL ;
>>>>> FONT oFont1, oFont2
>>>>> Else
>>>>> REPORT oReport TITLE "Listado de Paises" ;
>>>>> HEADER DtoC( Date() ) + " " + Time() ;
>>>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>>>> JOBNAME "PCventa - Listado de Paises" ;
>>>>> FONT oFont1, oFont2
>>>>> Endif
>>>>>
>>>>>
>>>>> COLUMN OF oReport ;
>>>>> TITLE "Código" ;
>>>>> DATA ::odbBrowse1:Pais ;
>>>>> ALIGN taLEFT ;
>>>>> CHARSIZE 10
>>>>>
>>>>> COLUMN OF oReport ;
>>>>> TITLE "Nombre" ;
>>>>> DATA ::odbBrowse1:Descripcion ;
>>>>> ALIGN taLEFT ;
>>>>> CHARSIZE 10
>>>>>
>>>>> RUN REPORT oReport
>>>>>
>>>>> oFont1:Destroy()
>>>>> oFont2:Destroy()
>>>>>
>>>>> ::oSqlTable1:RestoreState( .T. )
>>>>>
>>>>> Return NIL
>>>>> //---------------------------------------------
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>
Adjunto el codigo para el Reporte.
Saludos y Gracias
//---------------------------------------------------------- ----
METHOD Listado( lPreview )
LOCAL oReport,clpreview, oFont1, oFont2, oMaxRec
FIELD pais, descripcion
::oSqlTable1:GoTop()
::oSqlTable1:Skip() // esta linea para que no quede en la primera sino
en la segunda y no me de el error
::oSqlTable1:SaveState( .T. )
With Object oFont1 := TFont():New()
:cName := "Arial"
:nSize := 12
:lBold := .T.
END WITH
With Object oFont2 := TFont():New()
:cName := "Arial"
:nSize := 10
:lBold := .f.
END WITH
if lPreview
REPORT oReport TITLE "Listado de Paises" ;
HEADER DtoC( Date() ) + " " + Time() ;
FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
JOBNAME "PCventa - Listado de Paises" ;
PREVIEW MODAL
//FONT oFont1, oFont2
Else
REPORT oReport TITLE "Listado de Paises" ;
HEADER DtoC( Date() ) + " " + Time() ;
FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
JOBNAME "PCventa - Listado de Paises"
//FONT oFont1, oFont2
Endif
COLUMN OF oReport ;
TITLE "Código" ;
DATA ::osqlTable1:pais ;
ALIGN taLEFT
COLUMN OF oReport ;
TITLE "Nombre" ;
DATA ::osqlTable1:descripcion ;
ALIGN taLEFT
WITH OBJECT oReport
:bWhile := {|| !::osqlTable1:Eof() }
:bSkip := {|| ::oSqlTable1:Skip() }
END WITH
RUN REPORT oReport
oFont1:Destroy()
oFont2:Destroy()
::oSqlTable1:RestoreState( .T. )
::osqltable1:goTop() // esta linea para que regrese a la primera despues
de la impresion
RETURN NIL
// ------------------------------------------------------------ --------------------------------------
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:45af3486$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Fernando,
>
> Sin un ejemplo me es imposible saber que le puede estar pasando. No
> obstante:
>
> 1) Utilice un dataset clonado (método Clone) para la impresión como le
> dije
>
> 2) Sino hace caso al punto (1) al menos guarde y restaure el estado del
> dataset con los metodos SaveState y RestoreState
>
> 3) Utilice como expresión de bucle While !Ado:Eof()
>
> Saludos,
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
>
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=45ae8054@news.xailer.com...]45ae8054@news.xailer.com...[/email]
>> Ok, me funciono la primera vez con el orden en que abre el Dataset,
>> pero si luego en el TDBBROWSE cambio el orden de visualizacion y vuelvo a
>> generar el reporte me da el siguiente error.
>>
>> ADOBD:Recordset:nSkip(1) [#0]
>> En Procedimiento: TDBBROWSE:skip Linea:189
>>
>> Sin embargo, al final me genera el reporte, no sin antes mostrarme el
>> error 3 o 4 veces.
>>
>> Lo quese me esta ocurriendo es usar la funcion Keycount() y hacer un
>> While<= keycount().
>>
>> Quedo a espera de sus comentarios,
>>
>> Saludos
>>
>>
>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>> news:[email=45ae35d7@news.xailer.com...]45ae35d7@news.xailer.com...[/email]
>>> Solucionado,
>>>
>>> Gracias por la Ayuda y Saludos.
>>>
>>>
>>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>>> news:45ade0e7$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>>>> Fernando,
>>>>
>>>> 1) Están mal indicados los campos a utilizar. Has de utilizar el
>>>> DataSet directamente.
>>>>
>>>> COLUMN OF oReport ;
>>>> TITLE "Código" ;
>>>> DATA ::odbBrowse1:Pais ;
>>>> ALIGN taLEFT ;
>>>> CHARSIZE 10
>>>>
>>>> Cambialo por:
>>>>
>>>> COLUMN OF oReport ;
>>>> TITLE "Código" ;
>>>> DATA ::oDataSet1:Pais ;
>>>> ALIGN taLEFT ;
>>>> CHARSIZE 10
>>>>
>>>> 2) Faltan estas dos líneas antes de lanzar el report
>>>>
>>>> WITH OBJECT oReport
>>>> :bWhile := {|| !::oDataSet1:Eof() }
>>>> :bSkip := {|| ::oDataSet1:Skip() }
>>>> END WITH
>>>>
>>>> Por último, y como recomendación, te recomiendo ya que veo que tienes
>>>> un Browse activo al mismo tiempo que imprimes, que hagas un clon
>>>> (método Clone) del dataset y utilices ese clón para imprimir. Esto es
>>>> necesario ya que es posible que el Browse necesite repintarse y en
>>>> dicho caso te va a cambiar el Recno dentro del DataSet lo cual te puede
>>>> producir efectos catastróficos en tu informe.
>>>>
>>>> Un saludo,
>>>>
>>>> --
>>>> Ignacio Ortiz de Zúñiga
>>>> http://www.xailer.com
>>>>
>>>>
>>>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>>>> news:[email=45ad4c45@news.xailer.com...]45ad4c45@news.xailer.com...[/email]
>>>>> Buenas Tardes por aca
>>>>>
>>>>> Estoy tratando de imprimir un reporte tipo listado usando una base de
>>>>> datos en Oracle, la conexion es por ADO. Ya trate de mil formas, pero
>>>>> lo unico que me logra imprimir son los encabezados y no la informacion
>>>>> de los registros.
>>>>>
>>>>> Que podria estar haciendo mal
>>>>>
>>>>> Adjunto parte del codigo y gracias por la ayuda.
>>>>>
>>>>> Saludos
>>>>>
>>>>> //---------------------------------------------
>>>>> METHOD Reporte( lPreview )
>>>>>
>>>>> LOCAL oReport,clpreview, oFont1, oFont2
>>>>>
>>>>> FIELD pais, descripcion
>>>>>
>>>>> ::oSqlTable1:SaveState( .T. )
>>>>> ::oSqlTable1:GoTop()
>>>>>
>>>>> With Object oFont1 := TFont():New()
>>>>> :cName := "Arial"
>>>>> :nSize := 12
>>>>> :lBold := .T.
>>>>> END WITH
>>>>>
>>>>> With Object oFont2 := TFont():New()
>>>>> :cName := "Arial"
>>>>> :nSize := 10
>>>>> :lBold := .f.
>>>>> END WITH
>>>>>
>>>>> if lPreview
>>>>> REPORT oReport TITLE "Listado de Paises" ;
>>>>> HEADER DtoC( Date() ) + " " + Time() ;
>>>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>>>> JOBNAME "PCventa - Listado de Paises" ;
>>>>> PREVIEW MODAL ;
>>>>> FONT oFont1, oFont2
>>>>> Else
>>>>> REPORT oReport TITLE "Listado de Paises" ;
>>>>> HEADER DtoC( Date() ) + " " + Time() ;
>>>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>>>> JOBNAME "PCventa - Listado de Paises" ;
>>>>> FONT oFont1, oFont2
>>>>> Endif
>>>>>
>>>>>
>>>>> COLUMN OF oReport ;
>>>>> TITLE "Código" ;
>>>>> DATA ::odbBrowse1:Pais ;
>>>>> ALIGN taLEFT ;
>>>>> CHARSIZE 10
>>>>>
>>>>> COLUMN OF oReport ;
>>>>> TITLE "Nombre" ;
>>>>> DATA ::odbBrowse1:Descripcion ;
>>>>> ALIGN taLEFT ;
>>>>> CHARSIZE 10
>>>>>
>>>>> RUN REPORT oReport
>>>>>
>>>>> oFont1:Destroy()
>>>>> oFont2:Destroy()
>>>>>
>>>>> ::oSqlTable1:RestoreState( .T. )
>>>>>
>>>>> Return NIL
>>>>> //---------------------------------------------
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>
- ignacio
- Site Admin
- Mensajes: 9457
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Imprimir Reporte de una Tabla en Oracle
Fernando,
Visto el error, y se produce porque el browse intenta repintarse justo
cuando se va a mostrar el preview. Para ello el browse realiza operaciones
de Skip() para pintar todas sus filas, pero como el puntero de navegación se
encuentra al final del recordset por el proceso de listado, el Skip() no es
válido, y en el caso de ADO, genera un error de ejecución.
Con este mensaje le incluyo el código corregido para que no se genere el
error. No obstante, le RECOMIENDO EFUSIVAMENTE que utilice un dataset
clonado para el proceso de impresión.
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=45af86c3@news.xailer.com...]45af86c3@news.xailer.com...[/email]
> Buenos Dias
>
> Adjunto el codigo para el Reporte.
>
> Saludos y Gracias
>
> //---------------------------------------------------------- ----
> METHOD Listado( lPreview )
>
> LOCAL oReport,clpreview, oFont1, oFont2, oMaxRec
>
> FIELD pais, descripcion
>
> ::oSqlTable1:GoTop()
> ::oSqlTable1:Skip() // esta linea para que no quede en la primera sino
> en la segunda y no me de el error
> ::oSqlTable1:SaveState( .T. )
>
> With Object oFont1 := TFont():New()
> :cName := "Arial"
> :nSize := 12
> :lBold := .T.
> END WITH
>
> With Object oFont2 := TFont():New()
> :cName := "Arial"
> :nSize := 10
> :lBold := .f.
> END WITH
>
> if lPreview
> REPORT oReport TITLE "Listado de Paises" ;
> HEADER DtoC( Date() ) + " " + Time() ;
> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
> JOBNAME "PCventa - Listado de Paises" ;
> PREVIEW MODAL
> //FONT oFont1, oFont2
> Else
> REPORT oReport TITLE "Listado de Paises" ;
> HEADER DtoC( Date() ) + " " + Time() ;
> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
> JOBNAME "PCventa - Listado de Paises"
> //FONT oFont1, oFont2
> Endif
>
>
> COLUMN OF oReport ;
> TITLE "Código" ;
> DATA ::osqlTable1:pais ;
> ALIGN taLEFT
>
> COLUMN OF oReport ;
> TITLE "Nombre" ;
> DATA ::osqlTable1:descripcion ;
> ALIGN taLEFT
>
> WITH OBJECT oReport
> :bWhile := {|| !::osqlTable1:Eof() }
> :bSkip := {|| ::oSqlTable1:Skip() }
> END WITH
>
> RUN REPORT oReport
>
> oFont1:Destroy()
> oFont2:Destroy()
>
> ::oSqlTable1:RestoreState( .T. )
> ::osqltable1:goTop() // esta linea para que regrese a la primera
> despues
> de la impresion
>
> RETURN NIL
> // ------------------------------------------------------------ --------------------------------------
>
>
> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
> news:45af3486$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Fernando,
>>
>> Sin un ejemplo me es imposible saber que le puede estar pasando. No
>> obstante:
>>
>> 1) Utilice un dataset clonado (método Clone) para la impresión como le
>> dije
>>
>> 2) Sino hace caso al punto (1) al menos guarde y restaure el estado del
>> dataset con los metodos SaveState y RestoreState
>>
>> 3) Utilice como expresión de bucle While !Ado:Eof()
>>
>> Saludos,
>>
>> --
>> Ignacio Ortiz de Zúñiga
>> http://www.xailer.com
>>
>>
>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>> news:[email=45ae8054@news.xailer.com...]45ae8054@news.xailer.com...[/email]
>>> Ok, me funciono la primera vez con el orden en que abre el Dataset,
>>> pero si luego en el TDBBROWSE cambio el orden de visualizacion y vuelvo
>>> a
>>> generar el reporte me da el siguiente error.
>>>
>>> ADOBD:Recordset:nSkip(1) [#0]
>>> En Procedimiento: TDBBROWSE:skip Linea:189
>>>
>>> Sin embargo, al final me genera el reporte, no sin antes mostrarme el
>>> error 3 o 4 veces.
>>>
>>> Lo quese me esta ocurriendo es usar la funcion Keycount() y hacer un
>>> While<= keycount().
>>>
>>> Quedo a espera de sus comentarios,
>>>
>>> Saludos
>>>
>>>
>>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>>> news:[email=45ae35d7@news.xailer.com...]45ae35d7@news.xailer.com...[/email]
>>>> Solucionado,
>>>>
>>>> Gracias por la Ayuda y Saludos.
>>>>
>>>>
>>>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>>>> news:45ade0e7$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>>>>> Fernando,
>>>>>
>>>>> 1) Están mal indicados los campos a utilizar. Has de utilizar el
>>>>> DataSet directamente.
>>>>>
>>>>> COLUMN OF oReport ;
>>>>> TITLE "Código" ;
>>>>> DATA ::odbBrowse1:Pais ;
>>>>> ALIGN taLEFT ;
>>>>> CHARSIZE 10
>>>>>
>>>>> Cambialo por:
>>>>>
>>>>> COLUMN OF oReport ;
>>>>> TITLE "Código" ;
>>>>> DATA ::oDataSet1:Pais ;
>>>>> ALIGN taLEFT ;
>>>>> CHARSIZE 10
>>>>>
>>>>> 2) Faltan estas dos líneas antes de lanzar el report
>>>>>
>>>>> WITH OBJECT oReport
>>>>> :bWhile := {|| !::oDataSet1:Eof() }
>>>>> :bSkip := {|| ::oDataSet1:Skip() }
>>>>> END WITH
>>>>>
>>>>> Por último, y como recomendación, te recomiendo ya que veo que tienes
>>>>> un Browse activo al mismo tiempo que imprimes, que hagas un clon
>>>>> (método Clone) del dataset y utilices ese clón para imprimir. Esto es
>>>>> necesario ya que es posible que el Browse necesite repintarse y en
>>>>> dicho caso te va a cambiar el Recno dentro del DataSet lo cual te
>>>>> puede
>>>>> producir efectos catastróficos en tu informe.
>>>>>
>>>>> Un saludo,
>>>>>
>>>>> --
>>>>> Ignacio Ortiz de Zúñiga
>>>>> http://www.xailer.com
>>>>>
>>>>>
>>>>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>>>>> news:[email=45ad4c45@news.xailer.com...]45ad4c45@news.xailer.com...[/email]
>>>>>> Buenas Tardes por aca
>>>>>>
>>>>>> Estoy tratando de imprimir un reporte tipo listado usando una base de
>>>>>> datos en Oracle, la conexion es por ADO. Ya trate de mil formas, pero
>>>>>> lo unico que me logra imprimir son los encabezados y no la
>>>>>> informacion
>>>>>> de los registros.
>>>>>>
>>>>>> Que podria estar haciendo mal
>>>>>>
>>>>>> Adjunto parte del codigo y gracias por la ayuda.
>>>>>>
>>>>>> Saludos
>>>>>>
>>>>>> //---------------------------------------------
>>>>>> METHOD Reporte( lPreview )
>>>>>>
>>>>>> LOCAL oReport,clpreview, oFont1, oFont2
>>>>>>
>>>>>> FIELD pais, descripcion
>>>>>>
>>>>>> ::oSqlTable1:SaveState( .T. )
>>>>>> ::oSqlTable1:GoTop()
>>>>>>
>>>>>> With Object oFont1 := TFont():New()
>>>>>> :cName := "Arial"
>>>>>> :nSize := 12
>>>>>> :lBold := .T.
>>>>>> END WITH
>>>>>>
>>>>>> With Object oFont2 := TFont():New()
>>>>>> :cName := "Arial"
>>>>>> :nSize := 10
>>>>>> :lBold := .f.
>>>>>> END WITH
>>>>>>
>>>>>> if lPreview
>>>>>> REPORT oReport TITLE "Listado de Paises" ;
>>>>>> HEADER DtoC( Date() ) + " " + Time() ;
>>>>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>>>>> JOBNAME "PCventa - Listado de Paises" ;
>>>>>> PREVIEW MODAL ;
>>>>>> FONT oFont1, oFont2
>>>>>> Else
>>>>>> REPORT oReport TITLE "Listado de Paises" ;
>>>>>> HEADER DtoC( Date() ) + " " + Time() ;
>>>>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>>>>> JOBNAME "PCventa - Listado de Paises" ;
>>>>>> FONT oFont1, oFont2
>>>>>> Endif
>>>>>>
>>>>>>
>>>>>> COLUMN OF oReport ;
>>>>>> TITLE "Código" ;
>>>>>> DATA ::odbBrowse1:Pais ;
>>>>>> ALIGN taLEFT ;
>>>>>> CHARSIZE 10
>>>>>>
>>>>>> COLUMN OF oReport ;
>>>>>> TITLE "Nombre" ;
>>>>>> DATA ::odbBrowse1:Descripcion ;
>>>>>> ALIGN taLEFT ;
>>>>>> CHARSIZE 10
>>>>>>
>>>>>> RUN REPORT oReport
>>>>>>
>>>>>> oFont1:Destroy()
>>>>>> oFont2:Destroy()
>>>>>>
>>>>>> ::oSqlTable1:RestoreState( .T. )
>>>>>>
>>>>>> Return NIL
>>>>>> //---------------------------------------------
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>
Attached files Ado.rar (17.2 KB)Â
Visto el error, y se produce porque el browse intenta repintarse justo
cuando se va a mostrar el preview. Para ello el browse realiza operaciones
de Skip() para pintar todas sus filas, pero como el puntero de navegación se
encuentra al final del recordset por el proceso de listado, el Skip() no es
válido, y en el caso de ADO, genera un error de ejecución.
Con este mensaje le incluyo el código corregido para que no se genere el
error. No obstante, le RECOMIENDO EFUSIVAMENTE que utilice un dataset
clonado para el proceso de impresión.
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
news:[email=45af86c3@news.xailer.com...]45af86c3@news.xailer.com...[/email]
> Buenos Dias
>
> Adjunto el codigo para el Reporte.
>
> Saludos y Gracias
>
> //---------------------------------------------------------- ----
> METHOD Listado( lPreview )
>
> LOCAL oReport,clpreview, oFont1, oFont2, oMaxRec
>
> FIELD pais, descripcion
>
> ::oSqlTable1:GoTop()
> ::oSqlTable1:Skip() // esta linea para que no quede en la primera sino
> en la segunda y no me de el error
> ::oSqlTable1:SaveState( .T. )
>
> With Object oFont1 := TFont():New()
> :cName := "Arial"
> :nSize := 12
> :lBold := .T.
> END WITH
>
> With Object oFont2 := TFont():New()
> :cName := "Arial"
> :nSize := 10
> :lBold := .f.
> END WITH
>
> if lPreview
> REPORT oReport TITLE "Listado de Paises" ;
> HEADER DtoC( Date() ) + " " + Time() ;
> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
> JOBNAME "PCventa - Listado de Paises" ;
> PREVIEW MODAL
> //FONT oFont1, oFont2
> Else
> REPORT oReport TITLE "Listado de Paises" ;
> HEADER DtoC( Date() ) + " " + Time() ;
> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
> JOBNAME "PCventa - Listado de Paises"
> //FONT oFont1, oFont2
> Endif
>
>
> COLUMN OF oReport ;
> TITLE "Código" ;
> DATA ::osqlTable1:pais ;
> ALIGN taLEFT
>
> COLUMN OF oReport ;
> TITLE "Nombre" ;
> DATA ::osqlTable1:descripcion ;
> ALIGN taLEFT
>
> WITH OBJECT oReport
> :bWhile := {|| !::osqlTable1:Eof() }
> :bSkip := {|| ::oSqlTable1:Skip() }
> END WITH
>
> RUN REPORT oReport
>
> oFont1:Destroy()
> oFont2:Destroy()
>
> ::oSqlTable1:RestoreState( .T. )
> ::osqltable1:goTop() // esta linea para que regrese a la primera
> despues
> de la impresion
>
> RETURN NIL
> // ------------------------------------------------------------ --------------------------------------
>
>
> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
> news:45af3486$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Fernando,
>>
>> Sin un ejemplo me es imposible saber que le puede estar pasando. No
>> obstante:
>>
>> 1) Utilice un dataset clonado (método Clone) para la impresión como le
>> dije
>>
>> 2) Sino hace caso al punto (1) al menos guarde y restaure el estado del
>> dataset con los metodos SaveState y RestoreState
>>
>> 3) Utilice como expresión de bucle While !Ado:Eof()
>>
>> Saludos,
>>
>> --
>> Ignacio Ortiz de Zúñiga
>> http://www.xailer.com
>>
>>
>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>> news:[email=45ae8054@news.xailer.com...]45ae8054@news.xailer.com...[/email]
>>> Ok, me funciono la primera vez con el orden en que abre el Dataset,
>>> pero si luego en el TDBBROWSE cambio el orden de visualizacion y vuelvo
>>> a
>>> generar el reporte me da el siguiente error.
>>>
>>> ADOBD:Recordset:nSkip(1) [#0]
>>> En Procedimiento: TDBBROWSE:skip Linea:189
>>>
>>> Sin embargo, al final me genera el reporte, no sin antes mostrarme el
>>> error 3 o 4 veces.
>>>
>>> Lo quese me esta ocurriendo es usar la funcion Keycount() y hacer un
>>> While<= keycount().
>>>
>>> Quedo a espera de sus comentarios,
>>>
>>> Saludos
>>>
>>>
>>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>>> news:[email=45ae35d7@news.xailer.com...]45ae35d7@news.xailer.com...[/email]
>>>> Solucionado,
>>>>
>>>> Gracias por la Ayuda y Saludos.
>>>>
>>>>
>>>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>>>> news:45ade0e7$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>>>>> Fernando,
>>>>>
>>>>> 1) Están mal indicados los campos a utilizar. Has de utilizar el
>>>>> DataSet directamente.
>>>>>
>>>>> COLUMN OF oReport ;
>>>>> TITLE "Código" ;
>>>>> DATA ::odbBrowse1:Pais ;
>>>>> ALIGN taLEFT ;
>>>>> CHARSIZE 10
>>>>>
>>>>> Cambialo por:
>>>>>
>>>>> COLUMN OF oReport ;
>>>>> TITLE "Código" ;
>>>>> DATA ::oDataSet1:Pais ;
>>>>> ALIGN taLEFT ;
>>>>> CHARSIZE 10
>>>>>
>>>>> 2) Faltan estas dos líneas antes de lanzar el report
>>>>>
>>>>> WITH OBJECT oReport
>>>>> :bWhile := {|| !::oDataSet1:Eof() }
>>>>> :bSkip := {|| ::oDataSet1:Skip() }
>>>>> END WITH
>>>>>
>>>>> Por último, y como recomendación, te recomiendo ya que veo que tienes
>>>>> un Browse activo al mismo tiempo que imprimes, que hagas un clon
>>>>> (método Clone) del dataset y utilices ese clón para imprimir. Esto es
>>>>> necesario ya que es posible que el Browse necesite repintarse y en
>>>>> dicho caso te va a cambiar el Recno dentro del DataSet lo cual te
>>>>> puede
>>>>> producir efectos catastróficos en tu informe.
>>>>>
>>>>> Un saludo,
>>>>>
>>>>> --
>>>>> Ignacio Ortiz de Zúñiga
>>>>> http://www.xailer.com
>>>>>
>>>>>
>>>>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>>>>> news:[email=45ad4c45@news.xailer.com...]45ad4c45@news.xailer.com...[/email]
>>>>>> Buenas Tardes por aca
>>>>>>
>>>>>> Estoy tratando de imprimir un reporte tipo listado usando una base de
>>>>>> datos en Oracle, la conexion es por ADO. Ya trate de mil formas, pero
>>>>>> lo unico que me logra imprimir son los encabezados y no la
>>>>>> informacion
>>>>>> de los registros.
>>>>>>
>>>>>> Que podria estar haciendo mal
>>>>>>
>>>>>> Adjunto parte del codigo y gracias por la ayuda.
>>>>>>
>>>>>> Saludos
>>>>>>
>>>>>> //---------------------------------------------
>>>>>> METHOD Reporte( lPreview )
>>>>>>
>>>>>> LOCAL oReport,clpreview, oFont1, oFont2
>>>>>>
>>>>>> FIELD pais, descripcion
>>>>>>
>>>>>> ::oSqlTable1:SaveState( .T. )
>>>>>> ::oSqlTable1:GoTop()
>>>>>>
>>>>>> With Object oFont1 := TFont():New()
>>>>>> :cName := "Arial"
>>>>>> :nSize := 12
>>>>>> :lBold := .T.
>>>>>> END WITH
>>>>>>
>>>>>> With Object oFont2 := TFont():New()
>>>>>> :cName := "Arial"
>>>>>> :nSize := 10
>>>>>> :lBold := .f.
>>>>>> END WITH
>>>>>>
>>>>>> if lPreview
>>>>>> REPORT oReport TITLE "Listado de Paises" ;
>>>>>> HEADER DtoC( Date() ) + " " + Time() ;
>>>>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>>>>> JOBNAME "PCventa - Listado de Paises" ;
>>>>>> PREVIEW MODAL ;
>>>>>> FONT oFont1, oFont2
>>>>>> Else
>>>>>> REPORT oReport TITLE "Listado de Paises" ;
>>>>>> HEADER DtoC( Date() ) + " " + Time() ;
>>>>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>>>>> JOBNAME "PCventa - Listado de Paises" ;
>>>>>> FONT oFont1, oFont2
>>>>>> Endif
>>>>>>
>>>>>>
>>>>>> COLUMN OF oReport ;
>>>>>> TITLE "Código" ;
>>>>>> DATA ::odbBrowse1:Pais ;
>>>>>> ALIGN taLEFT ;
>>>>>> CHARSIZE 10
>>>>>>
>>>>>> COLUMN OF oReport ;
>>>>>> TITLE "Nombre" ;
>>>>>> DATA ::odbBrowse1:Descripcion ;
>>>>>> ALIGN taLEFT ;
>>>>>> CHARSIZE 10
>>>>>>
>>>>>> RUN REPORT oReport
>>>>>>
>>>>>> oFont1:Destroy()
>>>>>> oFont2:Destroy()
>>>>>>
>>>>>> ::oSqlTable1:RestoreState( .T. )
>>>>>>
>>>>>> Return NIL
>>>>>> //---------------------------------------------
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>
Attached files Ado.rar (17.2 KB)Â
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
-
- Mensajes: 113
- Registrado: Lun Nov 13, 2006 5:29 am
Imprimir Reporte de una Tabla en Oracle
Ok, gracias. Con el cambio funciono; sin embargo, voy a seguir su consejo y
clonar el dataset.
Saludos
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:[email=45afab7b@news.xailer.com...]45afab7b@news.xailer.com...[/email]
> Fernando,
>
> Visto el error, y se produce porque el browse intenta repintarse justo
> cuando se va a mostrar el preview. Para ello el browse realiza operaciones
> de Skip() para pintar todas sus filas, pero como el puntero de navegación
> se encuentra al final del recordset por el proceso de listado, el Skip()
> no es válido, y en el caso de ADO, genera un error de ejecución.
>
> Con este mensaje le incluyo el código corregido para que no se genere el
> error. No obstante, le RECOMIENDO EFUSIVAMENTE que utilice un dataset
> clonado para el proceso de impresión.
>
> Un saludo
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
>
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=45af86c3@news.xailer.com...]45af86c3@news.xailer.com...[/email]
>> Buenos Dias
>>
>> Adjunto el codigo para el Reporte.
>>
>> Saludos y Gracias
>>
>> //---------------------------------------------------------- ----
>> METHOD Listado( lPreview )
>>
>> LOCAL oReport,clpreview, oFont1, oFont2, oMaxRec
>>
>> FIELD pais, descripcion
>>
>> ::oSqlTable1:GoTop()
>> ::oSqlTable1:Skip() // esta linea para que no quede en la primera sino
>> en la segunda y no me de el error
>> ::oSqlTable1:SaveState( .T. )
>>
>> With Object oFont1 := TFont():New()
>> :cName := "Arial"
>> :nSize := 12
>> :lBold := .T.
>> END WITH
>>
>> With Object oFont2 := TFont():New()
>> :cName := "Arial"
>> :nSize := 10
>> :lBold := .f.
>> END WITH
>>
>> if lPreview
>> REPORT oReport TITLE "Listado de Paises" ;
>> HEADER DtoC( Date() ) + " " + Time() ;
>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>> JOBNAME "PCventa - Listado de Paises" ;
>> PREVIEW MODAL
>> //FONT oFont1, oFont2
>> Else
>> REPORT oReport TITLE "Listado de Paises" ;
>> HEADER DtoC( Date() ) + " " + Time() ;
>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>> JOBNAME "PCventa - Listado de Paises"
>> //FONT oFont1, oFont2
>> Endif
>>
>>
>> COLUMN OF oReport ;
>> TITLE "Código" ;
>> DATA ::osqlTable1:pais ;
>> ALIGN taLEFT
>>
>> COLUMN OF oReport ;
>> TITLE "Nombre" ;
>> DATA ::osqlTable1:descripcion ;
>> ALIGN taLEFT
>>
>> WITH OBJECT oReport
>> :bWhile := {|| !::osqlTable1:Eof() }
>> :bSkip := {|| ::oSqlTable1:Skip() }
>> END WITH
>>
>> RUN REPORT oReport
>>
>> oFont1:Destroy()
>> oFont2:Destroy()
>>
>> ::oSqlTable1:RestoreState( .T. )
>> ::osqltable1:goTop() // esta linea para que regrese a la primera
>> despues
>> de la impresion
>>
>> RETURN NIL
>> // ------------------------------------------------------------ --------------------------------------
>>
>>
>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>> news:45af3486$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>>> Fernando,
>>>
>>> Sin un ejemplo me es imposible saber que le puede estar pasando. No
>>> obstante:
>>>
>>> 1) Utilice un dataset clonado (método Clone) para la impresión como le
>>> dije
>>>
>>> 2) Sino hace caso al punto (1) al menos guarde y restaure el estado del
>>> dataset con los metodos SaveState y RestoreState
>>>
>>> 3) Utilice como expresión de bucle While !Ado:Eof()
>>>
>>> Saludos,
>>>
>>> --
>>> Ignacio Ortiz de Zúñiga
>>> http://www.xailer.com
>>>
>>>
>>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>>> news:[email=45ae8054@news.xailer.com...]45ae8054@news.xailer.com...[/email]
>>>> Ok, me funciono la primera vez con el orden en que abre el Dataset,
>>>> pero si luego en el TDBBROWSE cambio el orden de visualizacion y vuelvo
>>>> a
>>>> generar el reporte me da el siguiente error.
>>>>
>>>> ADOBD:Recordset:nSkip(1) [#0]
>>>> En Procedimiento: TDBBROWSE:skip Linea:189
>>>>
>>>> Sin embargo, al final me genera el reporte, no sin antes mostrarme el
>>>> error 3 o 4 veces.
>>>>
>>>> Lo quese me esta ocurriendo es usar la funcion Keycount() y hacer un
>>>> While<= keycount().
>>>>
>>>> Quedo a espera de sus comentarios,
>>>>
>>>> Saludos
>>>>
>>>>
>>>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>>>> news:[email=45ae35d7@news.xailer.com...]45ae35d7@news.xailer.com...[/email]
>>>>> Solucionado,
>>>>>
>>>>> Gracias por la Ayuda y Saludos.
>>>>>
>>>>>
>>>>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>>>>> news:45ade0e7$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>>>>>> Fernando,
>>>>>>
>>>>>> 1) Están mal indicados los campos a utilizar. Has de utilizar el
>>>>>> DataSet directamente.
>>>>>>
>>>>>> COLUMN OF oReport ;
>>>>>> TITLE "Código" ;
>>>>>> DATA ::odbBrowse1:Pais ;
>>>>>> ALIGN taLEFT ;
>>>>>> CHARSIZE 10
>>>>>>
>>>>>> Cambialo por:
>>>>>>
>>>>>> COLUMN OF oReport ;
>>>>>> TITLE "Código" ;
>>>>>> DATA ::oDataSet1:Pais ;
>>>>>> ALIGN taLEFT ;
>>>>>> CHARSIZE 10
>>>>>>
>>>>>> 2) Faltan estas dos líneas antes de lanzar el report
>>>>>>
>>>>>> WITH OBJECT oReport
>>>>>> :bWhile := {|| !::oDataSet1:Eof() }
>>>>>> :bSkip := {|| ::oDataSet1:Skip() }
>>>>>> END WITH
>>>>>>
>>>>>> Por último, y como recomendación, te recomiendo ya que veo que tienes
>>>>>> un Browse activo al mismo tiempo que imprimes, que hagas un clon
>>>>>> (método Clone) del dataset y utilices ese clón para imprimir. Esto es
>>>>>> necesario ya que es posible que el Browse necesite repintarse y en
>>>>>> dicho caso te va a cambiar el Recno dentro del DataSet lo cual te
>>>>>> puede
>>>>>> producir efectos catastróficos en tu informe.
>>>>>>
>>>>>> Un saludo,
>>>>>>
>>>>>> --
>>>>>> Ignacio Ortiz de Zúñiga
>>>>>> http://www.xailer.com
>>>>>>
>>>>>>
>>>>>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>>>>>> news:[email=45ad4c45@news.xailer.com...]45ad4c45@news.xailer.com...[/email]
>>>>>>> Buenas Tardes por aca
>>>>>>>
>>>>>>> Estoy tratando de imprimir un reporte tipo listado usando una base
>>>>>>> de
>>>>>>> datos en Oracle, la conexion es por ADO. Ya trate de mil formas,
>>>>>>> pero
>>>>>>> lo unico que me logra imprimir son los encabezados y no la
>>>>>>> informacion
>>>>>>> de los registros.
>>>>>>>
>>>>>>> Que podria estar haciendo mal
>>>>>>>
>>>>>>> Adjunto parte del codigo y gracias por la ayuda.
>>>>>>>
>>>>>>> Saludos
>>>>>>>
>>>>>>> //---------------------------------------------
>>>>>>> METHOD Reporte( lPreview )
>>>>>>>
>>>>>>> LOCAL oReport,clpreview, oFont1, oFont2
>>>>>>>
>>>>>>> FIELD pais, descripcion
>>>>>>>
>>>>>>> ::oSqlTable1:SaveState( .T. )
>>>>>>> ::oSqlTable1:GoTop()
>>>>>>>
>>>>>>> With Object oFont1 := TFont():New()
>>>>>>> :cName := "Arial"
>>>>>>> :nSize := 12
>>>>>>> :lBold := .T.
>>>>>>> END WITH
>>>>>>>
>>>>>>> With Object oFont2 := TFont():New()
>>>>>>> :cName := "Arial"
>>>>>>> :nSize := 10
>>>>>>> :lBold := .f.
>>>>>>> END WITH
>>>>>>>
>>>>>>> if lPreview
>>>>>>> REPORT oReport TITLE "Listado de Paises" ;
>>>>>>> HEADER DtoC( Date() ) + " " + Time() ;
>>>>>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>>>>>> JOBNAME "PCventa - Listado de Paises" ;
>>>>>>> PREVIEW MODAL ;
>>>>>>> FONT oFont1, oFont2
>>>>>>> Else
>>>>>>> REPORT oReport TITLE "Listado de Paises" ;
>>>>>>> HEADER DtoC( Date() ) + " " + Time() ;
>>>>>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>>>>>> JOBNAME "PCventa - Listado de Paises" ;
>>>>>>> FONT oFont1, oFont2
>>>>>>> Endif
>>>>>>>
>>>>>>>
>>>>>>> COLUMN OF oReport ;
>>>>>>> TITLE "Código" ;
>>>>>>> DATA ::odbBrowse1:Pais ;
>>>>>>> ALIGN taLEFT ;
>>>>>>> CHARSIZE 10
>>>>>>>
>>>>>>> COLUMN OF oReport ;
>>>>>>> TITLE "Nombre" ;
>>>>>>> DATA ::odbBrowse1:Descripcion ;
>>>>>>> ALIGN taLEFT ;
>>>>>>> CHARSIZE 10
>>>>>>>
>>>>>>> RUN REPORT oReport
>>>>>>>
>>>>>>> oFont1:Destroy()
>>>>>>> oFont2:Destroy()
>>>>>>>
>>>>>>> ::oSqlTable1:RestoreState( .T. )
>>>>>>>
>>>>>>> Return NIL
>>>>>>> //---------------------------------------------
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>
>
clonar el dataset.
Saludos
"Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
news:[email=45afab7b@news.xailer.com...]45afab7b@news.xailer.com...[/email]
> Fernando,
>
> Visto el error, y se produce porque el browse intenta repintarse justo
> cuando se va a mostrar el preview. Para ello el browse realiza operaciones
> de Skip() para pintar todas sus filas, pero como el puntero de navegación
> se encuentra al final del recordset por el proceso de listado, el Skip()
> no es válido, y en el caso de ADO, genera un error de ejecución.
>
> Con este mensaje le incluyo el código corregido para que no se genere el
> error. No obstante, le RECOMIENDO EFUSIVAMENTE que utilice un dataset
> clonado para el proceso de impresión.
>
> Un saludo
>
> --
> Ignacio Ortiz de Zúñiga
> http://www.xailer.com
>
>
> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
> news:[email=45af86c3@news.xailer.com...]45af86c3@news.xailer.com...[/email]
>> Buenos Dias
>>
>> Adjunto el codigo para el Reporte.
>>
>> Saludos y Gracias
>>
>> //---------------------------------------------------------- ----
>> METHOD Listado( lPreview )
>>
>> LOCAL oReport,clpreview, oFont1, oFont2, oMaxRec
>>
>> FIELD pais, descripcion
>>
>> ::oSqlTable1:GoTop()
>> ::oSqlTable1:Skip() // esta linea para que no quede en la primera sino
>> en la segunda y no me de el error
>> ::oSqlTable1:SaveState( .T. )
>>
>> With Object oFont1 := TFont():New()
>> :cName := "Arial"
>> :nSize := 12
>> :lBold := .T.
>> END WITH
>>
>> With Object oFont2 := TFont():New()
>> :cName := "Arial"
>> :nSize := 10
>> :lBold := .f.
>> END WITH
>>
>> if lPreview
>> REPORT oReport TITLE "Listado de Paises" ;
>> HEADER DtoC( Date() ) + " " + Time() ;
>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>> JOBNAME "PCventa - Listado de Paises" ;
>> PREVIEW MODAL
>> //FONT oFont1, oFont2
>> Else
>> REPORT oReport TITLE "Listado de Paises" ;
>> HEADER DtoC( Date() ) + " " + Time() ;
>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>> JOBNAME "PCventa - Listado de Paises"
>> //FONT oFont1, oFont2
>> Endif
>>
>>
>> COLUMN OF oReport ;
>> TITLE "Código" ;
>> DATA ::osqlTable1:pais ;
>> ALIGN taLEFT
>>
>> COLUMN OF oReport ;
>> TITLE "Nombre" ;
>> DATA ::osqlTable1:descripcion ;
>> ALIGN taLEFT
>>
>> WITH OBJECT oReport
>> :bWhile := {|| !::osqlTable1:Eof() }
>> :bSkip := {|| ::oSqlTable1:Skip() }
>> END WITH
>>
>> RUN REPORT oReport
>>
>> oFont1:Destroy()
>> oFont2:Destroy()
>>
>> ::oSqlTable1:RestoreState( .T. )
>> ::osqltable1:goTop() // esta linea para que regrese a la primera
>> despues
>> de la impresion
>>
>> RETURN NIL
>> // ------------------------------------------------------------ --------------------------------------
>>
>>
>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>> news:45af3486$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>>> Fernando,
>>>
>>> Sin un ejemplo me es imposible saber que le puede estar pasando. No
>>> obstante:
>>>
>>> 1) Utilice un dataset clonado (método Clone) para la impresión como le
>>> dije
>>>
>>> 2) Sino hace caso al punto (1) al menos guarde y restaure el estado del
>>> dataset con los metodos SaveState y RestoreState
>>>
>>> 3) Utilice como expresión de bucle While !Ado:Eof()
>>>
>>> Saludos,
>>>
>>> --
>>> Ignacio Ortiz de Zúñiga
>>> http://www.xailer.com
>>>
>>>
>>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>>> news:[email=45ae8054@news.xailer.com...]45ae8054@news.xailer.com...[/email]
>>>> Ok, me funciono la primera vez con el orden en que abre el Dataset,
>>>> pero si luego en el TDBBROWSE cambio el orden de visualizacion y vuelvo
>>>> a
>>>> generar el reporte me da el siguiente error.
>>>>
>>>> ADOBD:Recordset:nSkip(1) [#0]
>>>> En Procedimiento: TDBBROWSE:skip Linea:189
>>>>
>>>> Sin embargo, al final me genera el reporte, no sin antes mostrarme el
>>>> error 3 o 4 veces.
>>>>
>>>> Lo quese me esta ocurriendo es usar la funcion Keycount() y hacer un
>>>> While<= keycount().
>>>>
>>>> Quedo a espera de sus comentarios,
>>>>
>>>> Saludos
>>>>
>>>>
>>>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>>>> news:[email=45ae35d7@news.xailer.com...]45ae35d7@news.xailer.com...[/email]
>>>>> Solucionado,
>>>>>
>>>>> Gracias por la Ayuda y Saludos.
>>>>>
>>>>>
>>>>> "Ignacio Ortiz de Zúñiga" <NoName@xailer.com> escribió en el mensaje
>>>>> news:45ade0e7$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>>>>>> Fernando,
>>>>>>
>>>>>> 1) Están mal indicados los campos a utilizar. Has de utilizar el
>>>>>> DataSet directamente.
>>>>>>
>>>>>> COLUMN OF oReport ;
>>>>>> TITLE "Código" ;
>>>>>> DATA ::odbBrowse1:Pais ;
>>>>>> ALIGN taLEFT ;
>>>>>> CHARSIZE 10
>>>>>>
>>>>>> Cambialo por:
>>>>>>
>>>>>> COLUMN OF oReport ;
>>>>>> TITLE "Código" ;
>>>>>> DATA ::oDataSet1:Pais ;
>>>>>> ALIGN taLEFT ;
>>>>>> CHARSIZE 10
>>>>>>
>>>>>> 2) Faltan estas dos líneas antes de lanzar el report
>>>>>>
>>>>>> WITH OBJECT oReport
>>>>>> :bWhile := {|| !::oDataSet1:Eof() }
>>>>>> :bSkip := {|| ::oDataSet1:Skip() }
>>>>>> END WITH
>>>>>>
>>>>>> Por último, y como recomendación, te recomiendo ya que veo que tienes
>>>>>> un Browse activo al mismo tiempo que imprimes, que hagas un clon
>>>>>> (método Clone) del dataset y utilices ese clón para imprimir. Esto es
>>>>>> necesario ya que es posible que el Browse necesite repintarse y en
>>>>>> dicho caso te va a cambiar el Recno dentro del DataSet lo cual te
>>>>>> puede
>>>>>> producir efectos catastróficos en tu informe.
>>>>>>
>>>>>> Un saludo,
>>>>>>
>>>>>> --
>>>>>> Ignacio Ortiz de Zúñiga
>>>>>> http://www.xailer.com
>>>>>>
>>>>>>
>>>>>> "Fernando Hernandez" <dbfer@dilico.com.sv> escribió en el mensaje
>>>>>> news:[email=45ad4c45@news.xailer.com...]45ad4c45@news.xailer.com...[/email]
>>>>>>> Buenas Tardes por aca
>>>>>>>
>>>>>>> Estoy tratando de imprimir un reporte tipo listado usando una base
>>>>>>> de
>>>>>>> datos en Oracle, la conexion es por ADO. Ya trate de mil formas,
>>>>>>> pero
>>>>>>> lo unico que me logra imprimir son los encabezados y no la
>>>>>>> informacion
>>>>>>> de los registros.
>>>>>>>
>>>>>>> Que podria estar haciendo mal
>>>>>>>
>>>>>>> Adjunto parte del codigo y gracias por la ayuda.
>>>>>>>
>>>>>>> Saludos
>>>>>>>
>>>>>>> //---------------------------------------------
>>>>>>> METHOD Reporte( lPreview )
>>>>>>>
>>>>>>> LOCAL oReport,clpreview, oFont1, oFont2
>>>>>>>
>>>>>>> FIELD pais, descripcion
>>>>>>>
>>>>>>> ::oSqlTable1:SaveState( .T. )
>>>>>>> ::oSqlTable1:GoTop()
>>>>>>>
>>>>>>> With Object oFont1 := TFont():New()
>>>>>>> :cName := "Arial"
>>>>>>> :nSize := 12
>>>>>>> :lBold := .T.
>>>>>>> END WITH
>>>>>>>
>>>>>>> With Object oFont2 := TFont():New()
>>>>>>> :cName := "Arial"
>>>>>>> :nSize := 10
>>>>>>> :lBold := .f.
>>>>>>> END WITH
>>>>>>>
>>>>>>> if lPreview
>>>>>>> REPORT oReport TITLE "Listado de Paises" ;
>>>>>>> HEADER DtoC( Date() ) + " " + Time() ;
>>>>>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>>>>>> JOBNAME "PCventa - Listado de Paises" ;
>>>>>>> PREVIEW MODAL ;
>>>>>>> FONT oFont1, oFont2
>>>>>>> Else
>>>>>>> REPORT oReport TITLE "Listado de Paises" ;
>>>>>>> HEADER DtoC( Date() ) + " " + Time() ;
>>>>>>> FOOTER "Page: " + lTrim( Str( oReport:nPage ) ) ALIGN tarIGHT ;
>>>>>>> JOBNAME "PCventa - Listado de Paises" ;
>>>>>>> FONT oFont1, oFont2
>>>>>>> Endif
>>>>>>>
>>>>>>>
>>>>>>> COLUMN OF oReport ;
>>>>>>> TITLE "Código" ;
>>>>>>> DATA ::odbBrowse1:Pais ;
>>>>>>> ALIGN taLEFT ;
>>>>>>> CHARSIZE 10
>>>>>>>
>>>>>>> COLUMN OF oReport ;
>>>>>>> TITLE "Nombre" ;
>>>>>>> DATA ::odbBrowse1:Descripcion ;
>>>>>>> ALIGN taLEFT ;
>>>>>>> CHARSIZE 10
>>>>>>>
>>>>>>> RUN REPORT oReport
>>>>>>>
>>>>>>> oFont1:Destroy()
>>>>>>> oFont2:Destroy()
>>>>>>>
>>>>>>> ::oSqlTable1:RestoreState( .T. )
>>>>>>>
>>>>>>> Return NIL
>>>>>>> //---------------------------------------------
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>
>