MENSAGEM DE ERRO
Moderador: Moderadores
- filizola
- Usuário Nível 3

- Mensagens: 421
- Registrado em: 19 Ago 2003 20:10
- Localização: Belo Horizonte/MG
bem, para ajustar-mos definitivamente a rotina.
no programa principal inclua a linha
SET EXCLUSIVE OFF
na inclusao:
APPEND BLANK
REPLA CAMPO WITH VARIAVEL
UNLOCK
na alteracao:
RLOCK() - Nao gosto do rlock() tenho uma rotina que trata melhor o travamento do registro, tentando algumas vezes.
REPLA CAMPO WITH VARIAVEL
UNLOCK
na exclusao:
RLOCK()
DELETE
UNLOCK
no programa principal inclua a linha
SET EXCLUSIVE OFF
na inclusao:
APPEND BLANK
REPLA CAMPO WITH VARIAVEL
UNLOCK
na alteracao:
RLOCK() - Nao gosto do rlock() tenho uma rotina que trata melhor o travamento do registro, tentando algumas vezes.
REPLA CAMPO WITH VARIAVEL
UNLOCK
na exclusao:
RLOCK()
DELETE
UNLOCK
-
Glauco Cruz Costa
- Usuário Nível 3

- Mensagens: 102
- Registrado em: 15 Dez 2005 22:02
- Localização: Brasília/DF
- Contato:
NÃO DÁ CERTO. O PROGRAMA NÃO ABRE PARA EXCLUIR SEM SER EXCLUSIVO. VEJA OUTRA MENSAGEM POSTADA NO PCTOLEDO EM:
https://pctoledo.org/forum/viewto ... d970978ad4
https://pctoledo.org/forum/viewto ... d970978ad4
-
Glauco Cruz Costa
- Usuário Nível 3

- Mensagens: 102
- Registrado em: 15 Dez 2005 22:02
- Localização: Brasília/DF
- Contato:
-
Glauco Cruz Costa
- Usuário Nível 3

- Mensagens: 102
- Registrado em: 15 Dez 2005 22:02
- Localização: Brasília/DF
- Contato:
-
Glauco Cruz Costa
- Usuário Nível 3

- Mensagens: 102
- Registrado em: 15 Dez 2005 22:02
- Localização: Brasília/DF
- Contato:
FIZ UMA PERGUNTA LÁ, NAQUELE ENDEREÇO QUE TE INDIQUEI ANTERIORMENTE E VEJA O QUE ME RESPONDERAM:
"Use o mesmo arquivo no modo shared e da só um dbDelete() para marcar como deletado e use o SET DELETED ON para não processar os deletados... Depois crie uma rotina (que pode ser executada diariamente ou semanalmente, dependendo da necessidade) apenas para dar um PACK geral e compactar os arquivos. Essa rotina sim deve ser no EXCLUSIVE."
MAS, FICOU-ME UMAS DÚVIDAS, QUE ESTOU ESPERANDO RESPOSTA.
"Use o mesmo arquivo no modo shared e da só um dbDelete() para marcar como deletado e use o SET DELETED ON para não processar os deletados... Depois crie uma rotina (que pode ser executada diariamente ou semanalmente, dependendo da necessidade) apenas para dar um PACK geral e compactar os arquivos. Essa rotina sim deve ser no EXCLUSIVE."
MAS, FICOU-ME UMAS DÚVIDAS, QUE ESTOU ESPERANDO RESPOSTA.
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
Glauco Cruz Costa escreveu:FIZ UMA PERGUNTA LÁ, NAQUELE ENDEREÇO QUE TE INDIQUEI ANTERIORMENTE E VEJA O QUE ME RESPONDERAM:
"Use o mesmo arquivo no modo shared e da só um dbDelete() para marcar como deletado e use o SET DELETED ON para não processar os deletados... Depois crie uma rotina (que pode ser executada diariamente ou semanalmente, dependendo da necessidade) apenas para dar um PACK geral e compactar os arquivos. Essa rotina sim deve ser no EXCLUSIVE."
Hahaha, eu que escrevi e reintero...
Não é necessário abrir o arquivo duas vezes em seguida.
Outra coisa é que eu tambem não tenho o costume de usar o select ANTES de abrir um arquivo e sim de abrir com a clausula NEW.
Por últmo posso te dizer que um arquivo ou é aberto como compartilhado (SHARED) ou como exclusivo (EXCLUSIVE), os dois ao mesmo tempo não né... Por mais que vc tente enganar o compilador trocando de área com o select, o arquico é um só, e o DOS não cai no truque...
Ok...
Stanis Luksys
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
-
Glauco Cruz Costa
- Usuário Nível 3

- Mensagens: 102
- Registrado em: 15 Dez 2005 22:02
- Localização: Brasília/DF
- Contato:
Stanis Luksys escreveu:Glauco Cruz Costa escreveu:FIZ UMA PERGUNTA LÁ, NAQUELE ENDEREÇO QUE TE INDIQUEI ANTERIORMENTE E VEJA O QUE ME RESPONDERAM:
"Use o mesmo arquivo no modo shared e da só um dbDelete() para marcar como deletado e use o SET DELETED ON para não processar os deletados... Depois crie uma rotina (que pode ser executada diariamente ou semanalmente, dependendo da necessidade) apenas para dar um PACK geral e compactar os arquivos. Essa rotina sim deve ser no EXCLUSIVE."
Hahaha, eu que escrevi e reintero...
Não é necessário abrir o arquivo duas vezes em seguida.
Outra coisa é que eu tambem não tenho o costume de usar o select ANTES de abrir um arquivo e sim de abrir com a clausula NEW.
Por últmo posso te dizer que um arquivo ou é aberto como compartilhado (SHARED) ou como exclusivo (EXCLUSIVE), os dois ao mesmo tempo não né... Por mais que vc tente enganar o compilador trocando de área com o select, o arquico é um só, e o DOS não cai no truque...
Ok...
A AÍ, COLEGA. CONSEGUIU CHEGAR AQUI, HEIM!
VEJA A VIAJEM QUE FIZEMOS COM ESSA DÚVIDA.
MAS, FOI BOM. ESTOU AGORA ORGANIZANDO MEU PROGRAMA.
NÃO SOU PROGRAMADOR PROFISSIONAL. APENAS APRENDI CLIPPER BÁSICO NO PASSADO E AGORA ESTOU FAZENDO UM PROGRAMA PARA FACILITAR MEU TRABALHO NO HOSPITAL, DE FORMA QUE NÃO PRECISEMOS PERDER TEMPO PREENCHENDO FORMULÁRIOS A MÃO, QUANDO O SISTEMA DE LÁ DÁ PAU, O QUE ACONTECE SEMPRE.
OBRIGADO.
-
Glauco Cruz Costa
- Usuário Nível 3

- Mensagens: 102
- Registrado em: 15 Dez 2005 22:02
- Localização: Brasília/DF
- Contato:
EU TENTEI ANTES USAR SEM SELECT, MAS O PROGRAMA ACUSOU A FALTA DO MESMO. E AÍ, TIVE QUE USAR E ME COMPLICAR...Stanis Luksys escreveu:Glauco Cruz Costa escreveu:FIZ UMA PERGUNTA LÁ, NAQUELE ENDEREÇO QUE TE INDIQUEI ANTERIORMENTE E VEJA O QUE ME RESPONDERAM:
"Use o mesmo arquivo no modo shared e da só um dbDelete() para marcar como deletado e use o SET DELETED ON para não processar os deletados... Depois crie uma rotina (que pode ser executada diariamente ou semanalmente, dependendo da necessidade) apenas para dar um PACK geral e compactar os arquivos. Essa rotina sim deve ser no EXCLUSIVE."
Hahaha, eu que escrevi e reintero...
Não é necessário abrir o arquivo duas vezes em seguida.
Outra coisa é que eu tambem não tenho o costume de usar o select ANTES de abrir um arquivo e sim de abrir com a clausula NEW.
Por últmo posso te dizer que um arquivo ou é aberto como compartilhado (SHARED) ou como exclusivo (EXCLUSIVE), os dois ao mesmo tempo não né... Por mais que vc tente enganar o compilador trocando de área com o select, o arquico é um só, e o DOS não cai no truque...
Ok...
-
Glauco Cruz Costa
- Usuário Nível 3

- Mensagens: 102
- Registrado em: 15 Dez 2005 22:02
- Localização: Brasília/DF
- Contato:
ESTOU COM OUTRO PROBLEMA, AGORA.
VEJA SE PODE ME AJUDAR.
A MENSAGEM DE ERRO É:
Workarea not in use: DBGOTOP (a mesma inicialmente)
A MESMA MENSAGEM NOVAMENTE.
VEJA COMO ESTÁ MINHA PROCEDURE. ELA FUNCIONA ASSIM: PRIMEIRO EU APAGO O RETORNO2 PARA DEPOIS COPIAR O QUE INTERESSA DO RETORNO1 PARA ELE. DEPOIS, USO O RETORNO2 PARA IMPRIMIR. EU PODERIA TER FEITO A IMPRESSÃO A PARTIR DO RETORNO1, MAS NÃO CONSEGUI. ASSIM, CRIEI ESSA ROTINA TODA. MAS, EIS A PROCEDURE:
SELECT 1
USE RETORNO SHARED NEW
SELECT 2
USE RETORNO2
...
// IMPRESSAO POR DATA
PROCEDURE IMPDATA
SELECT 2
SET CONFIRM ON // PARA DAR ENTER APOS PREENCHER UM GET
SET ESCAPE ON // PARA INTERRROMPER UM GET COM ESC
SAVE SCREEN TO IMPN
ZAP
CLOSE DATABASE
SELECT 1
CLS
SET CONFIRM ON
IF LASTKEY() = 27
QUIT
ENDIF
DAT = CTOD(" / / ")
@ 05,05 SAY "DIGITE A DATA:" GET DAT
READ
GO TOP
COPY TO RETORNO2 FOR DATA = DAT
CLOSE DATABASE
/* USE MEDICO
COPY TO RETORNO2
ZAP
CLOSE DATABASE */
SELECT 2
SET CONFIRM ON // PARA DAR ENTER APÓS PREENCHER UM GET
SET ESCAPE ON // PARA INTERRROMPER UM GET COM ESC
SAVE SCREEN TO IMPN
CLS
@ 24,15 SAY " PRESSIONE QUALQUER TECLA PARA IMPRIMIR "
INKEY(0)
@24,15 SAY " IMPRIMINDO. AGUARDE... "
LIN=1
EJ=1
SET DEVICE TO PRINTER
IF .NOT. ISPRINTER()
@ 24,15 SAY "ERRO NA IMPRESSORA. PRESSIONE QUALQUER TECLA."
INKEY(0)
RETURN
ENDIF
GO TOP
DO WHILE .NOT. EOF()
LIN = LIN + 2
@ LIN,02 SAY PRONTUARIO
LIN = LIN + 2
@ LIN,02 SAY MEDICO
@ LIN,50 SAY CLINICA
LIN = LIN + 2
@ LIN,02 SAY CLINICA
LIN = LIN + 2
@ LIN,02 SAY DATA
LIN = LIN + 2
@LIN,02 SAY REPLICATE('.',60)
EJ = EJ + 1
IF EJ = 7
EJECT
EJ = 1
LIN = 1
ENDIF
SKIP
ENDDO
SET DEVICE TO SCREEN
CLOSE DATABASE
EJECT
RETURN
VEJA SE PODE ME AJUDAR.
A MENSAGEM DE ERRO É:
Workarea not in use: DBGOTOP (a mesma inicialmente)
A MESMA MENSAGEM NOVAMENTE.
VEJA COMO ESTÁ MINHA PROCEDURE. ELA FUNCIONA ASSIM: PRIMEIRO EU APAGO O RETORNO2 PARA DEPOIS COPIAR O QUE INTERESSA DO RETORNO1 PARA ELE. DEPOIS, USO O RETORNO2 PARA IMPRIMIR. EU PODERIA TER FEITO A IMPRESSÃO A PARTIR DO RETORNO1, MAS NÃO CONSEGUI. ASSIM, CRIEI ESSA ROTINA TODA. MAS, EIS A PROCEDURE:
SELECT 1
USE RETORNO SHARED NEW
SELECT 2
USE RETORNO2
...
// IMPRESSAO POR DATA
PROCEDURE IMPDATA
SELECT 2
SET CONFIRM ON // PARA DAR ENTER APOS PREENCHER UM GET
SET ESCAPE ON // PARA INTERRROMPER UM GET COM ESC
SAVE SCREEN TO IMPN
ZAP
CLOSE DATABASE
SELECT 1
CLS
SET CONFIRM ON
IF LASTKEY() = 27
QUIT
ENDIF
DAT = CTOD(" / / ")
@ 05,05 SAY "DIGITE A DATA:" GET DAT
READ
GO TOP
COPY TO RETORNO2 FOR DATA = DAT
CLOSE DATABASE
/* USE MEDICO
COPY TO RETORNO2
ZAP
CLOSE DATABASE */
SELECT 2
SET CONFIRM ON // PARA DAR ENTER APÓS PREENCHER UM GET
SET ESCAPE ON // PARA INTERRROMPER UM GET COM ESC
SAVE SCREEN TO IMPN
CLS
@ 24,15 SAY " PRESSIONE QUALQUER TECLA PARA IMPRIMIR "
INKEY(0)
@24,15 SAY " IMPRIMINDO. AGUARDE... "
LIN=1
EJ=1
SET DEVICE TO PRINTER
IF .NOT. ISPRINTER()
@ 24,15 SAY "ERRO NA IMPRESSORA. PRESSIONE QUALQUER TECLA."
INKEY(0)
RETURN
ENDIF
GO TOP
DO WHILE .NOT. EOF()
LIN = LIN + 2
@ LIN,02 SAY PRONTUARIO
LIN = LIN + 2
@ LIN,02 SAY MEDICO
@ LIN,50 SAY CLINICA
LIN = LIN + 2
@ LIN,02 SAY CLINICA
LIN = LIN + 2
@ LIN,02 SAY DATA
LIN = LIN + 2
@LIN,02 SAY REPLICATE('.',60)
EJ = EJ + 1
IF EJ = 7
EJECT
EJ = 1
LIN = 1
ENDIF
SKIP
ENDDO
SET DEVICE TO SCREEN
CLOSE DATABASE
EJECT
RETURN
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho
O problema todo esta em utilizar o programa em modo mono ou rede.
Se for usar um .DBF em modo mono voce nem precisa abrir com exclusividade pois por padrão este é o modo de abertura dos mesmos.
Em modo mono voce nem precisa travar o arquivo para dar PACK, REPLACE ALL, etc.
Se for usar em modo rede voce terá de acrescentar algumas linhas no seu programa.
No .PRG principal acrescente a seguinte linha logo no inicio:
SET EXCLUSIVE OFF
Este comando diz ao aplicativo que estara trabalhando em modo compartilhado.
Quanto ao tratamento dos registros voce deverá a partir de agora travar e destravar em cada REPLACE e DELETE:
Exemplo:
Vai incluir
USE arquivo SHARED // Necessário pois agora esta em modo rede
...
APPEND BLANK // Quando em modo rede trava sozinho
REPLACE ...
COMMIT // Usado para salvar o buffer de dados no registro, não precisa UNLOCK // Só por precaução
Vai salvar
USE arquivo SHARED
...
RLOCK() // Necessario travar o registro quando em modo rede
REPLACE ...
COMMIT // Idem ao anterior
UNLOCK // idem ao anterior
Somente use o EXCLUSIVE quando for INDEXar, PACKear, RECALL ALL, REPLACE ALL ou ZAPear.
Espero ter ajudado.
@braços :?)
O problema todo esta em utilizar o programa em modo mono ou rede.
Se for usar um .DBF em modo mono voce nem precisa abrir com exclusividade pois por padrão este é o modo de abertura dos mesmos.
Em modo mono voce nem precisa travar o arquivo para dar PACK, REPLACE ALL, etc.
Se for usar em modo rede voce terá de acrescentar algumas linhas no seu programa.
No .PRG principal acrescente a seguinte linha logo no inicio:
SET EXCLUSIVE OFF
Este comando diz ao aplicativo que estara trabalhando em modo compartilhado.
Quanto ao tratamento dos registros voce deverá a partir de agora travar e destravar em cada REPLACE e DELETE:
Exemplo:
Vai incluir
USE arquivo SHARED // Necessário pois agora esta em modo rede
...
APPEND BLANK // Quando em modo rede trava sozinho
REPLACE ...
COMMIT // Usado para salvar o buffer de dados no registro, não precisa UNLOCK // Só por precaução
Vai salvar
USE arquivo SHARED
...
RLOCK() // Necessario travar o registro quando em modo rede
REPLACE ...
COMMIT // Idem ao anterior
UNLOCK // idem ao anterior
Somente use o EXCLUSIVE quando for INDEXar, PACKear, RECALL ALL, REPLACE ALL ou ZAPear.
Espero ter ajudado.
@braços :?)
-
Glauco Cruz Costa
- Usuário Nível 3

- Mensagens: 102
- Registrado em: 15 Dez 2005 22:02
- Localização: Brasília/DF
- Contato:
COLEGA. O MEU PROGRAMA É NO MODO MULTIUSUÁRIO (REDE). O RETORNO1 É COMPARTILHADO. O RETORNO2 NÃO É.
ESSA PROCEDURE ESTÁ DANDO AQUELE ERRO (WORKAREA NOT IN USE: DBGOTOP).
ACHO QUE O PROBLEMA É NOS SELECTS QUE USO. TUDO QUE COLOCOU JÁ ME FORA PASSADO, COMO PODERÁ VERIFICAR NAS MENSAGENS ANTERIORES. ASSIM, SE PUDER ME AJUDAR...
ESSA PROCEDURE ESTÁ DANDO AQUELE ERRO (WORKAREA NOT IN USE: DBGOTOP).
ACHO QUE O PROBLEMA É NOS SELECTS QUE USO. TUDO QUE COLOCOU JÁ ME FORA PASSADO, COMO PODERÁ VERIFICAR NAS MENSAGENS ANTERIORES. ASSIM, SE PUDER ME AJUDAR...
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
Prezado Glauco,Glauco Cruz Costa escreveu:SELECT 1
USE RETORNO SHARED NEW
SELECT 2
USE RETORNO2
É neste exato ponto que sua rotina está errada, pois quando você abre o RETORNO2 vc está fechando o RETORNO, pois não informou a cláusula NEW. Altere estas quatro linhas para o seguinte o código de duas linhas:
USE RETORNO SHARED NEW
USE RETORNO2 SHARED NEW
Bem mais simples e prático, e para melhor visualização do seu prg procure não utilizar o select com numeros, neste caso quando você precisar alterar a área corrente use assim:
SELECT RETORNO
ou
SELECT RETORNO2
Pode testar que vai funcionar
Stanis Luksys
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
-
Glauco Cruz Costa
- Usuário Nível 3

- Mensagens: 102
- Registrado em: 15 Dez 2005 22:02
- Localização: Brasília/DF
- Contato:
COLEGA. CONTINUA O MESMO ERRO. FIZ MAIS OU MENOS PEDIU. SÓ NÃO PUDE TIRAR OS SELECTS, POIS O PROGRAMA ACUSA A SUA FALTA. VEJA:
NO INÍCIO DO PROGRAMA:
SELECT 1
USE RETORNO SHARED NEW
SELECT 2
USE RETORNO2 SHARED NEW
DEPOIS, NA PROCEDURE IMPRIMIR POR DATA:
PROCEDURE IMPDATA
SELECT 2
SET CONFIRM ON // PARA DAR ENTER APOS PREENCHER UM GET
SET ESCAPE ON // PARA INTERRROMPER UM GET COM ESC
SAVE SCREEN TO IMPN
GO TOP
DO WHILE .NOT. EOF()
RLOCK()
DBDELETE()
SKIP
ENDDO
DBUNLOCK()
DBCOMMIT()
// ZAP
CLOSE DATABASE
SELECT 1
CLS
SET CONFIRM ON
IF LASTKEY() = 27
RETURN
ENDIF
DAT = CTOD(" / / ")
@ 05,05 SAY "DIGITE A DATA:" GET DAT
READ
GO TOP
COPY TO RETORNO2 FOR DATA = DAT
CLOSE DATABASE
SELECT 2
SET CONFIRM ON // PARA DAR ENTER APÓS PREENCHER UM GET
SET ESCAPE ON // PARA INTERRROMPER UM GET COM ESC
SAVE SCREEN TO IMPN
CLS
@ 24,15 SAY " PRESSIONE QUALQUER TECLA PARA IMPRIMIR "
INKEY(0)
@24,15 SAY " IMPRIMINDO. AGUARDE... "
LIN=1
EJ=1
SET DEVICE TO PRINTER
IF .NOT. ISPRINTER()
@ 24,15 SAY "ERRO NA IMPRESSORA. PRESSIONE QUALQUER TECLA."
INKEY(0)
RETURN
ENDIF
GO TOP
DO WHILE .NOT. EOF()
LIN = LIN + 2
@ LIN,02 SAY PRONTUARIO
LIN = LIN + 2
@ LIN,02 SAY MEDICO
@ LIN,50 SAY CLINICA
LIN = LIN + 2
@ LIN,02 SAY CLINICA
LIN = LIN + 2
@ LIN,02 SAY DATA
LIN = LIN + 2
@LIN,02 SAY REPLICATE('.',60)
EJ = EJ + 1
IF EJ = 7
EJECT
EJ = 1
LIN = 1
ENDIF
SKIP
ENDDO
SET DEVICE TO SCREEN
CLOSE DATABASE
EJECT
RETURN
SÓ TIVE QUE TIRAR O ZAP E SUBSTITUIR POR UMA ROTINA QUE DÁ DELETE UM POR UM NOS REGISTROS.
EU TAMBÉM TENTEI COLOCAR COMO VOCÊ DISSE, SUBSTITUINDO AS 4 LINHAS PELAS DUAS, E AO SE CHAMAR OS DBFS COLOQUEI
SELECT RETORNO e
SELECT RETORNO2
MAS, DEU UM ERRO DE 'ALIAS'...
EU SÓ USO O RETORNO2.DBF NA ROTINA DE IMPRESSÃO, POIS NÃO OBTIVE SUCESSO COM SOMENTE O RETORNO.DBF. ASSIM, COMO EU PODERIA AJUSTAR ESSA PROCEDURE PARA NÃO PRECISAR USAR O SEGUNDO DBF E IMPRIMIR LEGAL? SE PUDER ME AJUDAR NISSO, NÃO PRECISAREI USAR MAIS DE UM DBF, E, ACHO, TUDO FICARÁ RESOLVIDO.
NO INÍCIO DO PROGRAMA:
SELECT 1
USE RETORNO SHARED NEW
SELECT 2
USE RETORNO2 SHARED NEW
DEPOIS, NA PROCEDURE IMPRIMIR POR DATA:
PROCEDURE IMPDATA
SELECT 2
SET CONFIRM ON // PARA DAR ENTER APOS PREENCHER UM GET
SET ESCAPE ON // PARA INTERRROMPER UM GET COM ESC
SAVE SCREEN TO IMPN
GO TOP
DO WHILE .NOT. EOF()
RLOCK()
DBDELETE()
SKIP
ENDDO
DBUNLOCK()
DBCOMMIT()
// ZAP
CLOSE DATABASE
SELECT 1
CLS
SET CONFIRM ON
IF LASTKEY() = 27
RETURN
ENDIF
DAT = CTOD(" / / ")
@ 05,05 SAY "DIGITE A DATA:" GET DAT
READ
GO TOP
COPY TO RETORNO2 FOR DATA = DAT
CLOSE DATABASE
SELECT 2
SET CONFIRM ON // PARA DAR ENTER APÓS PREENCHER UM GET
SET ESCAPE ON // PARA INTERRROMPER UM GET COM ESC
SAVE SCREEN TO IMPN
CLS
@ 24,15 SAY " PRESSIONE QUALQUER TECLA PARA IMPRIMIR "
INKEY(0)
@24,15 SAY " IMPRIMINDO. AGUARDE... "
LIN=1
EJ=1
SET DEVICE TO PRINTER
IF .NOT. ISPRINTER()
@ 24,15 SAY "ERRO NA IMPRESSORA. PRESSIONE QUALQUER TECLA."
INKEY(0)
RETURN
ENDIF
GO TOP
DO WHILE .NOT. EOF()
LIN = LIN + 2
@ LIN,02 SAY PRONTUARIO
LIN = LIN + 2
@ LIN,02 SAY MEDICO
@ LIN,50 SAY CLINICA
LIN = LIN + 2
@ LIN,02 SAY CLINICA
LIN = LIN + 2
@ LIN,02 SAY DATA
LIN = LIN + 2
@LIN,02 SAY REPLICATE('.',60)
EJ = EJ + 1
IF EJ = 7
EJECT
EJ = 1
LIN = 1
ENDIF
SKIP
ENDDO
SET DEVICE TO SCREEN
CLOSE DATABASE
EJECT
RETURN
SÓ TIVE QUE TIRAR O ZAP E SUBSTITUIR POR UMA ROTINA QUE DÁ DELETE UM POR UM NOS REGISTROS.
EU TAMBÉM TENTEI COLOCAR COMO VOCÊ DISSE, SUBSTITUINDO AS 4 LINHAS PELAS DUAS, E AO SE CHAMAR OS DBFS COLOQUEI
SELECT RETORNO e
SELECT RETORNO2
MAS, DEU UM ERRO DE 'ALIAS'...
EU SÓ USO O RETORNO2.DBF NA ROTINA DE IMPRESSÃO, POIS NÃO OBTIVE SUCESSO COM SOMENTE O RETORNO.DBF. ASSIM, COMO EU PODERIA AJUSTAR ESSA PROCEDURE PARA NÃO PRECISAR USAR O SEGUNDO DBF E IMPRIMIR LEGAL? SE PUDER ME AJUDAR NISSO, NÃO PRECISAREI USAR MAIS DE UM DBF, E, ACHO, TUDO FICARÁ RESOLVIDO.