O procedimento que tenho adotado para exibir relatórios no VIDEO é o seguinte: mando a impressão para um TXT.... depois importo esse TXT para um DBF e através do Tbrowse o visualizo na tela.
Ou seja, o relatório é mostrado na tela somente ser gerado todo o TXT (lido registro a registro) e depois importado para um DBF.
Em um teste simples com um banco de dados com 40.000 registros, esse procedimento durou cerca de 37 segundos.
Se em vez de mandar a impressão para um TXT, eu exibir esses dados através de um DbEdit ou Tbrowse, os mesmos 40.000 registros são mostrados instantaneamente.
Por que?? Acredito que seja pelo fato de com o TXT o relatório só é mostrado após a leitura de TODOS os dados. Já com o Dbedit ou Tbrowse esse dados vãos sendo lidos a medida que vão sendo mostrados na tela.
A pergunta é:
1-) Esse procedimento está correto??
2-) Não há como ir gerando esse TXT à medida que for sendo mostrado o relatório na tela (como acontece com o tbrowse) ??
Para TXT:
Código: Selecionar todos
SET PRINT ON
SET PRINTER TO arquivo.txt
SET DEVICE TO PRINTER
SET CONSOLE OFF
SetPrc(0,0)
xSOMA := 0
cCONTA := 0
vDATAi := Ctod("01/01/2007")
vDATAf := Ctod("31/12/2007")
SELECT PEDIDO
DBSETORDER(8)
GOTO TOP
ORDSCOPE( 0, DTOS(vDATAi) )
ORDSCOPE( 1, DTOS(vDATAf) )
GOTO TOP
SET RELATION TO CODCLI INTO CLIENTE, TO CODVED INTO VENDEDOR
DO WHILE !EOF()
vTOTAL_PED = ( PEDIDO->TOTPED - PEDIDO->VLRDES )
@ PROW() + 01,00 SAY PEDIDO->PEDIDO PICT "@E 999,999"
@ PROW() ,08 SAY STRZERO(PEDIDO->CODCLI,4)
@ PROW() ,13 SAY CLIENTE->NOMCLI PICT "@!S22"
@ PROW() ,37 SAY VENDEDOR->NOMRDZ PICT "@!"
@ PROW() ,51 SAY STRZERO(PEDIDO->QTDPAR,02)
@ PROW() ,59 SAY PEDIDO->VENPRI
@ PROW() ,70 SAY vTOTAL_PED PICT "@E 99,999.99"
xSOMA = xSOMA + vTOTAL_PED
cCONTA = cCONTA + 1
DBSKIP()
ENDDO
ORDSCOPE( 0, NIL )
ORDSCOPE( 1, NIL )
@ PROW() + 03,00 SAY PADC("****** FIM DO RELATORIO ******",79)
SET CONSOLE ON
SET PRINTER OFF
SET PRINTER TO
SET DEVICE TO SCREEN
Código: Selecionar todos
vDATAi := Ctod("01/01/2007")
vDATAf := Ctod("31/12/2007")
SELECT PEDIDO
DBSETORDER(8)
GOTO TOP
ORDSCOPE( 0, DTOS(vDATAi) )
ORDSCOPE( 1, DTOS(vDATAf) )
GOTO TOP
SET RELATION TO CODCLI INTO CLIENTE, TO CODVED INTO VENDEDOR
DbEdit(1,1,23,79)



