Página 1 de 1

Código de Erro (BASE/1002 ALIAS does not exist: <arquvio>)

Enviado: 18 Jul 2011 15:59
por raquelreis
Boa Tarde à todos,
Estou iniciando em Clipper e já vi meu primeiro problema.
Ao executar certa função o sistema executa normalmente, mas em um determinado momento ele para e dá o seguinte erro:
ERROR BASE/1002 ALIAS does not exist: histbal
Pesquisei em alguns sites e até mesmo aqui no forúm e não consegui encontrar uma solução.
OBS.: O arquivo histbal.dbf está na pasta, e consigo visualizá-lo normalmente.
código do erro:

Código: Selecionar todos

SELE HISTBAL
if FRede("AB")
   REPLACE  DATA      WITH CTOD(dthoje),;
            BALANCO   WITH ARQDBF,;
            CODEMP    WITH pCODEMP
  DBCOMMIT() ; DBUNLOCK()
endif
Obrigada!

Código de Erro (BASE/1002 ALIAS does not exist: <arquvio>)

Enviado: 18 Jul 2011 16:16
por Maligno
Havendo um erro de ALIAS não encontrado, de duas uma: ou esse nome não foi utilizado na abertura do arquivo ou, no meio do caminho, o arquivo foi fechado, o que gera exatamente esse erro. É preciso verificar o código entre essas duas pontas.

Código de Erro (BASE/1002 ALIAS does not exist: <arquvio>)

Enviado: 18 Jul 2011 16:25
por alxsts
Olá!

Seja bem-vinda ao fórum Raquel!

O erro ocorre após o Endif?
O trecho de código é pequeno mas, talvez seja o seguinte:

Código: Selecionar todos

SELE HISTBAL     // área selecionada ---> HISTBAL
if FRede("AB")
   // Se conseguiu abrir outro arquivo, a área atualmente selecionada será a do arquivo que foi aberto...
   /// executa operações no alias "AB"
   REPLACE  DATA      WITH CTOD(dthoje),;
            BALANCO   WITH ARQDBF,;
            CODEMP    WITH pCODEMP
  DBCOMMIT() ; DBUNLOCK()
endif

   // aqui, se você quer executar operações no alias HISTBAL, deverá selecioná-lo
   // ou usar expressões com alias, por exemplo: (HISTBAL->( DbAppend() ) 
Sugestão: mude o SELECT HISTBAL para depois do Endif, desde que não impacte o código anterior.

Código de Erro (BASE/1002 ALIAS does not exist: <arquvio>)

Enviado: 18 Jul 2011 16:44
por raquelreis
Boa Tarde alxsts,

Os campos DATA, BALANCO e CODEMP são do arquvi HISTBAL. Logo, acredito que deveria abrir primeiro o HISTBAL e depois executar o IF?

Código de Erro (BASE/1002 ALIAS does not exist: <arquvio>)

Enviado: 18 Jul 2011 16:45
por Maligno
Boa intervenção. Me fez rever o que disse e constatei um erro de expressão. Onde eu disse:

"ou, no meio do caminho, o arquivo foi fechado" deveria ter escrito:
"ou, no meio do caminho, a área foi trocada".

Havendo uma troca de área, o uso do arquivo da área fechada deve ser feito com o comando de direcionamento: AREA->arquivo_dbf. Sem isso, o erro gerado é esse mesmo.

Código de Erro (BASE/1002 ALIAS does not exist: <arquvio>)

Enviado: 18 Jul 2011 17:24
por raquelreis
Boa Tarde Maligno(novamente)

no caso o código ficaria:

Código: Selecionar todos

AREA -> HISTBAL
                          // REGISTRA O ULTIMO BALANCO EFETUADO
         if FRede( "AB" )
            REPLACE DATA    WITH CTOD(dthoje),;
                    BALANCO WITH ARQDBF,;
                    CODEMP  WITH pCODEMP
            DBCOMMIT() ; DBUNLOCK()

         endif
[/b]

Código de Erro (BASE/1002 ALIAS does not exist: <arquvio>)

Enviado: 18 Jul 2011 17:35
por alxsts
Olá!

O Clipper, como todos os dialetos xBase, trabalha com o conceito de área selecionada. Assim, se você abrir n arquivos (com DbUseArea() ou USE ... NEW), a última área onde foi aberto o enésimo arquivo passará a set a área ativa (currently selected database) Neste caso, para acessar uma área diferente da selecionada, tem que seguir a orientação do Maligno:
Maligno escreveu:Havendo uma troca de área, o uso do arquivo da área fechada deve ser feito com o comando de direcionamento: AREA->arquivo_dbf
Neste caso, ficaria assim:

Código: Selecionar todos

SELE HISTBAL     // área selecionada ---> HISTBAL
if FRede("AB")
   // Se conseguiu abrir outro arquivo, a área atualmente selecionada será a do arquivo que foi aberto...
   // executa operações no alias "HISTBAL" ---> HISTBAL->node_da_coluna
   REPLACE  HISTBAL->DATA      WITH CTOD(dthoje),;
            HISTBAL->BALANCO   WITH ARQDBF,;
            HISTBAL->CODEMP    WITH pCODEMP
  DBCOMMIT() ; DBUNLOCK()
endif

Código de Erro (BASE/1002 ALIAS does not exist: <arquvio>)

Enviado: 19 Jul 2011 07:38
por Jairo Maia
Caros Colegas,

O erro ocorre pq ela está tentando selecionar um aliás, que não está aberto.
raquelreis escreveu:Os campos DATA, BALANCO e CODEMP são do arquvi HISTBAL. Logo, acredito que deveria abrir primeiro o HISTBAL e depois executar o IF?
Sim. Primeiro vc precisa abrir o arquivo. Como vc não está usando SEEK, entendo que vc está apenas gravando um novo registro. Assim, altere seu código desta forma:

Código: Selecionar todos

IF SELECT( "HISTBAL" ) = 0  // Se não está aberto, vamos abrir
 SELE 0  // Seleciona a próxima área livre
 USE HISTBAL SHARED  // Abre no modo compartilhado
ELSE  // Se não,
 SELE HISTBAL  // Apenas seleciona a área
ENDI
APPEND BLANK  // Cria um registro em branco e trava
 REPLACE DATA WITH CTOD(dthoje)
 REPLACE BALANCO WITH ARQDBF
 REPLACE CODEMP WITH pCODEMP
DBCOMMIT()  // Salva os dados
DBUNLOCK()  // libera o registro

Código de Erro (BASE/1002 ALIAS does not exist: <arquvio>)

Enviado: 19 Jul 2011 11:49
por raquelreis
Bom dia Jairo,
Foi de grande ajuda a sua dica.
Realmente resolveu meu problema.

Peço muito obrigado à todos os demais pelo esclarecimento.

Problema Resolvido !!!

Código de Erro (BASE/1002 ALIAS does not exist: <arquvio>)

Enviado: 19 Jul 2011 15:39
por alxsts
Olá!

Interpretei que a tabela HISTBAL já tivesse sido aberta antes do trecho de código expôsto e que alguns dados a gravar viriam da tabela aberta no IF FRede("AB"), que foi retirado do código final.

Código de Erro (BASE/1002 ALIAS does not exist: <arquvio>)

Enviado: 19 Jul 2011 17:20
por Jairo Maia
Olá Alexandre,
alxsts escreveu:Interpretei que a tabela HISTBAL já tivesse sido aberta
Mas pela Natureza do erro, em nenhum momento interpretei assim.
alxsts escreveu:e que alguns dados a gravar viriam da tabela aberta no IF FRede("AB")
Pois é... Considerando o código que ela postou, e também pelo nome da função, interpretei que fosse uma função com mensagem temporizadora para bloquear o arquivo, por isso a removi, uma vez que como iria usar o APPEND BLANK, ele bloqueia automaticamente o registro. Mas se necessitou ajustes ela os fez. Legal.

Código de Erro (BASE/1002 ALIAS does not exist: <arquvio>)

Enviado: 20 Jul 2011 14:11
por raquelreis
Boa Tarde,

Por esclarecimento, Jairo eu não retirei a função FRede("AB") como estou com esse sistema apenas 3 dias ainda nao a identifiquei. Tbm não usei o APPEND BLANK. Mas usei sua lógica. Se o <arquivo> não foi aberto, abra e use. Se não, use o <arquivo>. O restante do código deixei igual.

Abraço à todos,
Muito obrigada pela ajuda!