MENSAGEM DE ERRO

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem 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...
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.
Glauco Cruz Costa
Usuário Nível 3
Usuário Nível 3
Mensagens: 102
Registrado em: 15 Dez 2005 22:02
Localização: Brasília/DF
Contato:

Mensagem 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.
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem 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!
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.
Glauco Cruz Costa
Usuário Nível 3
Usuário Nível 3
Mensagens: 102
Registrado em: 15 Dez 2005 22:02
Localização: Brasília/DF
Contato:

Mensagem 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!
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem 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 :?)
Responder