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