Página 3 de 3
Enviado: 29 Dez 2005 13:24
por Stanis Luksys
Glauco Cruz Costa escreveu: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
Amigo, isso aí continua errado pois veja se entende:
Ao usar a cláusula NEW você está abrindo o arquivo na PRÓXIMA ÁREA LIVRE automaticamente, traduzindo seu código:
SELECT 1 ----> seleciona a area 1 - apague esta linha
USE RETORNO SHARED NEW ----> abre arquivo na area 2 (proxima)
SELECT 2 ----> seleciona area 2 (Retorno) - apague esta linha
USE RETORNO2 SHARED NEW ----> abre arquivo na area 3 (proxima)
Retire os SELECT destas linhas e altere em todo seu código todos os SELECT 1 por SELECT RETORNO, e todos os SELECT 2 por SELECT RETORNO2.
Ok. Depois me conta...
Enviado: 29 Dez 2005 18:18
por Glauco Cruz Costa
FIZ TUDO COMO PEDIU.
AGORA, NO MOMENTO EM QUE EU VOU IMPRIMIR APARECE O ERRO:
ALIAS DOES NOT EXIST: RETORNO. E ESTE ERRO APONTA PARA A LINHA ONDE ESTÁ SELECT RETORNO.
Enviado: 29 Dez 2005 19:40
por Stanis Luksys
Amigo, alterei um pouco a lógica da sua rotina e obtive este resultado, não é necessário abrir os arquivos antes dela.
Código: Selecionar todos
function impdata()
use retorno2 exclusive new
zap
close retorno2
cls
if lastkey() = 27
quit
endif
dat = ctod(" / / ")
@ 05,05 say "digite a data:" get dat
read
use retorno shared new
copy to retorno2 for data = dat
close retorno
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
use retorno2 shared new
dbGoTop()
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
eject
close retorno2
restore screen from impn
return nil
Posta aí falando o resultado depois...
Falo!
Enviado: 29 Dez 2005 20:39
por Glauco Cruz Costa
AGORA DEU ERRO SOMENTE DO ZAP. MAS, EU TROQUEI O ZAP POR UMA ROTINA DE EXCLUSÃO UM POR UM, E DEU CERTO. FUNCIONOU.
OBRIGADO!
Enviado: 30 Dez 2005 02:39
por rochinha
Amiguinho
O problema esta mais visivel do que nunca:
SELECT 1
USE RETORNO SHARED NEW
SELECT 2
USE RETORNO2 SHARED NEW
Voce [n]não[/b] pode usar comandos que exijam EXCLUSIVEdade num arquivo aberto como SHARED
Voce não pode dar comandos como REPLACE ALL, RECALL ALL, DELETE ALL, APPEND FROM ou COPY TO em arquivos que sejam SHARED.
Mude sua rotina ou troque o COPY TO para:
SELECT 1
GO TOP
DO WHILE .NOT. EOF()
IF ColoqueAquiASuaCritica
// Pegue os dados de cada campo da area 1
ENDIF
SELECT 2
APPEND BLANK
REPLACE CadaVariavel WITH CadaCampo
COMMIT
SELECT 1
SKIP
ENDDO
Ou faça assim:
SELECT 1
USE RETORNO EXCLUSIVE NEW
SELECT 2
USE RETORNO2 EXCLUSIVE NEW
Da primeira forma voce podera passar dados de um arquivo para outro em modo SHARED e do segundo voce trava para toda rede a abertura destes arquivos mas não precisa alterar toda sua rotina.
@braços :?)