Saber se DBF já está aberto

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Saber se DBF já está aberto

Mensagem por lugab »

Pessoal, boa noite...

No programa cheio de funções, vários arquivos vão sendo abertos, mas eu preciso saber saber se um deles, por exemplo o arquivo "Barquivo.dbf com o aliás arqB", já foi aberto anteriormente em algum outro trecho...
exemplo:

Código: Selecionar todos

use Aarquivo shared new alias arqA
use Barquivo shared new alias arqB
use Carquivo shared new alias arqC

Como faço pra saber ? Eu uso Hb20, console...
lugab
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Saber se DBF já está aberto

Mensagem por Jairo Maia »

Você pode usar a função Select():

Código: Selecionar todos

nArea := Select( arqB )

If nArea = 0
 
 SELE 0

 USE "Aarquivo.dbf" Shared New Alias arqB 

Else

 DbSelectArea( nArea )

EndIf
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Saber se DBF já está aberto

Mensagem por lugab »

Obrigado, Jairo. Vou testar.

O comando select() seria assim:

Código: Selecionar todos

nArea := Select( arqB )
ou assim

Código: Selecionar todos

nArea := Select( "arqB" )
?
lugab
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Saber se DBF já está aberto

Mensagem por Jairo Maia »

Ops!!! Tem razão...

O correto é entre aspas, pois no exemplo foi usado o nome literal do Alias, não variável. Mas seria rápido você perceber, receberia o RTE de variável inexistente.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Saber se DBF já está aberto

Mensagem por JoséQuintas »

O comando select() seria assim:
Cuidado com o texto... e com o fonte também.

Existe o comando SELECT
Existe a função Select()

Código: Selecionar todos

SELECT ( "clientes" )
Select( "clientes" )
Parece a mesma coisa, mas não é.
SELECT é o comando pra trocar a área em uso
Select() é a função pra retornar qual a área

Em algumas rotinas até uso isto:

Código: Selecionar todos

nSelect := Select()
SELECT outra
...
SELECT ( nSelect )
Mais um motivo pra manter o fonte bem formatado, ou até usar maiúsculas/minúsculas pra comandos e funções.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Saber se DBF já está aberto

Mensagem por lugab »

Jairo e Quintas,

muito obrigado..
lugab
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Saber se DBF já está aberto

Mensagem por Itamar M. Lins Jr. »

Ola!
Esse é mais smart!
https://harbour.github.io/doc/harbour.html#used

Código: Selecionar todos

USE test NEW
? TESTS->( Used() ) //.T.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Saber se DBF já está aberto

Mensagem por JoséQuintas »

Esse não serve.

Código: Selecionar todos

d:\temp>test

Error BASE/1002  Alias does not exist: TESTS
Called from MAIN(3)
d:\temp>
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Saber se DBF já está aberto

Mensagem por Itamar M. Lins Jr. »

Ola!
OXIIII, como não ? até tu Brutus ???

Código: Selecionar todos

IF !test->(used())
 use test new 
else
 ? test->name...
ENDIF

Se vai abrir tem que testar antes, ora !!! tira o "S"! ou coloca o "S" no test

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Saber se DBF já está aberto

Mensagem por JoséQuintas »

Teste o seu exemplo.

Código: Selecionar todos

PROCEDURE Main

IF !test->(used())
 use test new
else
 ? test->name
ENDIF
RETURN

Código: Selecionar todos

d:\temp>test

Error BASE/1002  Alias does not exist: TEST
Called from MAIN(3)
d:\temp>
A questão é simples: como vai acessar um alias que não existe?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Saber se DBF já está aberto

Mensagem por Itamar M. Lins Jr. »

Vixi!!
Isso mesmo, sou eu que estou me passando aqui. Escrevendo uma coisa pensando em outra.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Saber se DBF já está aberto

Mensagem por asimoes »

Será que não é mais simples:

Código: Selecionar todos

If Select("test") != 0
   Alert("Test aberto")
End
►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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Saber se DBF já está aberto

Mensagem por JoséQuintas »

Sim, isso já foi descrito acima.
A última parte foi referente a uma sugestão inválida.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Saber se DBF já está aberto

Mensagem por lugab »

Obrigado, Jairo, Quintas, Itamar e Asimoes.
Ta resolvido.
Vc são super solidários
lugab
Responder