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
>>>>>>> //---------------------------------------------
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>
>