Página 1 de 1

Saber se alias esta em uso

Enviado: 04 Jan 2012 15:18
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

Saber se alias esta em uso

Enviado: 04 Jan 2012 15:31
por alxsts
Olá!

Código: Selecionar todos

IF Select( "Cliente" ) == 0
   Use Cliente Shared New Index Cliente1
Endif

Saber se alias esta em uso

Enviado: 04 Jan 2012 15:46
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



Saber se alias esta em uso

Enviado: 04 Jan 2012 17:31
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

Saber se alias esta em uso

Enviado: 04 Jan 2012 19:24
por asimoes
Muito Bom Rochinha!

Saber se alias esta em uso

Enviado: 04 Jan 2012 20:54
por alxsts
Olá!

Excelentes respostas!

Para ser rápido, respondi da forma mais simples, para o Rubens sair logo do enrôsco...

Saber se alias esta em uso

Enviado: 05 Jan 2012 01:57
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.

Saber se alias esta em uso

Enviado: 05 Jan 2012 14:28
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