Saber se alias esta em uso

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Saber se alias esta em uso

Mensagem por rubens »

Preciso saber se um arquivo esta em uso

use personal alias pers
use cupom alias cup new
use cliente alias cli new

sele pers // se nao existir pers dá erro que o alias nao existe
user personal alias pers // se o arquivo estiver aberto da erro

Como eu posso verificar se o alias pers está em uso ?

Obrigado

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Saber se alias esta em uso

Mensagem por alxsts »

Olá!

Código: Selecionar todos

IF Select( "Cliente" ) == 0
   Use Cliente Shared New Index Cliente1
Endif
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Saber se alias esta em uso

Mensagem por asimoes »

Olá uma pequena correção:
Veja:
Se usar a clausula ALIAS o nome do ALIAS deve ser usado na função SELECT() caso contrário use o próprio nome do DBF

Código: Selecionar todos

*Com ALIAS
IF  Select( "Cust" ) == 0
   USE Customer ALIAS Cust NEW
ENDIF

*Com nome do DBF

IF  Select( "Customer" ) == 0
   USE Customer NEW
ENDIF

IF  Select( "pers" ) == 0
   use personal alias pers
ENDIF
IF  Select( "cup" ) == 0
   use cupom alias cup new
ENDIF
IF  Select( "cli" ) == 0
   use cliente alias cli new
ENDIF


►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Saber se alias esta em uso

Mensagem por rochinha »

Amiguinhos,

Como ALIAS é um apelido momentaneo e se voce abrir um mesmo .DBF com vários ALIASes prefira usar o apelido para a critica.

Código: Selecionar todos

USE clientes ALIAS clientes1
USE clientes ALIAS clientes2
USE clientes ALIAS clientes3

IF  Select( "clientes2" ) == 0
     USE clientes NEW ALIAS clientes2
ELSE
     Select( "clientes2" )
ENDIF
Caso não queira digitar tantas linhas como acima use este comando estendido no inicio .PRG principal:

Código: Selecionar todos

#command OPEN <(db)>                                                    ;
             [VIA <rdd>]                                                ;
             [ALIAS <a>]                                                ;
             [<new: NEW>]                                               ;
             [<ex: EXCLUSIVE>]                                          ;
             [<sh: SHARED>]                                             ;
             [<ro: READONLY>]                                           ;
             [INDEX <(index1)> [, <(indexn)>]]                          ;
       => iif( Select( <(db)> )==0, iif( !File( <(db)>+".CDX" ), ( Mensagem( "Arquivo "+<(db)>+" esta sem indices. Abrindo sem indices. Reorganiza primeiro" ), dbNetUseArea( <.new.>, <rdd>, <(db)>, <(a)>, if(<.sh.> .or. <.ex.>, !<.ex.>, NIL), <.ro.>, 0 ) ), ( dbNetUseArea( <.new.>, <rdd>, <(db)>, <(a)>, if(<.sh.> .or. <.ex.>, !<.ex.>, NIL), <.ro.>, 0 ), dbSetIndex( <(db)> ) ) ), ( dbSelectArea( <(db)> ) ) )
Ai seu primeiro codigo ficará assim:

Código: Selecionar todos

OPEN clientes NEW ALIAS clientes1
OPEN clientes NEW ALIAS clientes2
OPEN clientes NEW ALIAS clientes3

//IF  Select( "clientes2" ) == 0
//     USE clientes NEW ALIAS clientes2
//ELSE
//     Select( "clientes2" )
//ENDIF
O comando extendio faz a critica para voce e abre ou seleciona a tabela. A função mensagem pode ser trocada pela mesma que voce usa no sistema ou pelo alert() padrão.

No caso de tentar saber, em uma rotina de indexação ou travamento, se o arquivo possa estar aberto em outra estação use:

Código: Selecionar todos

Function dblocked( dbf )
  ldbf := FOPEN( dbf, 1 )
  IF FERROR() <> 0
     RETURN .t.
  ENDIF
  FCLOSE(ldbf)
  RETURN .f.
Uso:

Código: Selecionar todos

...
if dblocked( "clientes.dbf" )
   ? "Arquivo ainda aberto em outra estação."
endif
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Saber se alias esta em uso

Mensagem por asimoes »

Muito Bom Rochinha!
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Saber se alias esta em uso

Mensagem por alxsts »

Olá!

Excelentes respostas!

Para ser rápido, respondi da forma mais simples, para o Rubens sair logo do enrôsco...
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Saber se alias esta em uso

Mensagem por rochinha »

Amiguinhos,

alxsts a forma como voce respondeu foi direta ao ponto mesmo, e inclusive é provavelmente uma solução unica, ou seja, praticamente padrão.

Como faltava um perfuminho, hehehe, coloquei.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Saber se alias esta em uso

Mensagem por billy1943 »

Eu uso a seguinte forma para abrir arquivos e seus índices;

Nas rotinas quando precisar do arquivo de notas (NFE_NOTA), coloco:

ABRENFNO(0) onde:

ABRENFNO = rotina de abertura do arquivo NFE_NOTA cujo alias é NFNO
0 = parametro para indicar ao sistema para deixar o arquivo aberto
1 = parametro para fechar o arquivo = usado para testar somente se o arquivo existe
2 = parametro para gerar o índice incondicionalmente, mesmo que ele exista

Ela é bem simples de ser implementada e funciona.
Espero ter ajudado no propósito principal deste tópico.

Código: Selecionar todos

PROCEDURE abrenfno(fecha)

if (select("nfno") <> 0)
   select nfno
   close nfno
endif

select 0
abre_compart(m->pathesp + "nfe_nota","nfno")  
// abre_compar = função para abrir arquivos em modo compartilhado
// m->pathesp   = variável que guarda o caminho da rede
// nfe_nota       = arquivo .DBF
// nfno              = alias do arquivo nas rotinas 

if (fecha == 2) .or. ! file (m->pathesp + "nfno1.ntx")
   set index to
   abre_exclus()   // função para abrir o arquivo em modo exclusivo
   pack
   index on nfe_serie + nfe_numero + nfe_fornec to (m->pathesp + "nfno1")
   dbunlock()
   abre_compar()   // volta a colocar em modo compartilhado 
endif

set index to (m->pathesp+"nfno1")

if type("fecha") <> nil
   if fecha == 1
      close
   endif
endif
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Responder