Outras arquivos são fechados com comando Use arquivo shared

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

Moderador: Moderadores

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Outras arquivos são fechados com comando Use arquivo shared

Mensagem por porter »

Olá pessoal,
Tenho 22 arquivos abertos, quando tento abrir por exemplo o ARQUIVO18, ele abre normalmente, mas os arquivos anteriores são fechados, ou seja do ARQUIVO17 ate o ARQUIVO01, são fechados, pelo Debugador, verifiquei que eles fecham na linha USE ARQUIVO18 SHARED, não sei o que há de errado com essa função, em outras partes do sistema, quando há menos arquivos abertos, esse problema não acontece, não creio que aja uma quantidade excessiva de arquivos abertos.

HARBOUR 3.2.0(dev)

ARQUIVO1.DBF
.
.
.
ARQUIVO22.DBF

FUNCTION ABRE_18
SELECT 18
USE ARQUIVO18 SHARED <--- Nessa linha, os arquivos anteriores a ele, são fechados...
RETURN
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Outras arquivos são fechados com comando Use arquivo shared

Mensagem por Itamar M. Lins Jr. »

Ola!
Cadê o parâmetro "NEW" ?

Código: Selecionar todos

NEW opens <xcDatabase> in the next available work area making it the
     current work area.  If this clause is not specified, <xcDatabase> is
     opened in the current work area.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Outras arquivos são fechados com comando Use arquivo shared

Mensagem por Jairo Maia »

Olá Pessoal,

Porter, quando você seleciona uma área e abre um arquivo, o arquivo aberto nessa área é fechado. Porém, não é seu caso, pois você está selecionando a área 18 e abrindo o arquivo, não deveria fechar nenhum outro. Você disse que somente nesse caso acontece isso, acho que há algo errado antes de você chamar essa função que está fechando os arquivos antes.

É que não sei se seu sistema trabalha chamando a área diretamente pelo número, se for (aliás desaconselhável), então fica complicado alterar, mas se não for o caso, ou seja, se você seleciona a área pelo nome do ALIAS, sugiro alterar sua função dessa forma:

Código: Selecionar todos

FUNCTION ABRE_18
IF SELECT(  ARQUIVO18 ) = 0
 USE ARQUIVO18 SHARED NEW
ELSE
 SELECT ARQUIVO18
ENDIF
RETURN
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

Outras arquivos são fechados com comando Use arquivo shared

Mensagem por JoséQuintas »

Uma observação no fonte do Jairo, que até me deixou na dúvida.
Sempre usei com aspas

Código: Selecionar todos

Select( "arquivo18" )
Não confundir o comando SELECT com a função Select(), é o mesmo nome, mas são coisas diferentes.

Uma coisa que uso no meu aplicativo é isto:

Código: Selecionar todos

SELECT  ( Select( "ARQUIVO18" ) )
USE arquivo18
Se estiver aberto, retorna o número da área e já seleciona a área.
Se estiver fechado, retorna 0, e seleciona uma área nova.

Só cuidado com coisas deste tipo:

Código: Selecionar todos

SELECT( CLIENTE )
GOTO TOP
Isso não vai selecionar a área CLIENTE, isso apenas vai retornar o número da área e vai continuar na atual.
O espaço depois de select e antes dos parêntesis é que vai definir se é comando ou função.
Veja se não fez isso no seu fonte.

E como já foi dito pelo Itamar, outra opção é usar o NEW no comando USE.

Nota: O primeiro caso é pra se criar uma rotina de abrir arquivos, no uso normal basta o NEW, ou SELECT 0 antes de abrir.
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
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Outras arquivos são fechados com comando Use arquivo shared

Mensagem por Jairo Maia »

Tem razão José, é entre aspas:

Código: Selecionar todos

IF SELECT(  "ARQUIVO18" ) = 0
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

Outras arquivos são fechados com comando Use arquivo shared

Mensagem por JoséQuintas »

Cadê o parâmetro "NEW" ?
Itamar, tá no fonte, área 18, é um jeito ruim de programar, mas também funciona.... rs

Código: Selecionar todos

SELECT 18
USE ARQUIVO18 SHARED 
E aproveitando:

Se possível, não use número de área ou número pra índice.

Código: Selecionar todos

SELECT 0
USE CLIENTES
INDEX ON codcli TAG codigo
SET INDEX TO CLIENTES
SELECT 0
USE ESTOQUE
INDEX ON codpro TAG produto
SET INDEX TO ESTOQUE
SELECT CLIENTES
OrdSetFocus( "código" )
SELECT ESTOQUE
OrdSetFocus( "produto" )
Ao invés de decorar números, pode usar o nome, melhor pra conferir o fonte. - no caso de índice, vale pra CDX
Quanto ao SELECT 0, ou isso, ou a cláusula NEW, os dois tem o mesmo efeito.

Mesmo assim, isso não explica fechar todos os arquivos, no máximo fecharia o último.
A não ser que tenha feito a mesma coisa em todos os arquivos, sem selecionar área nova.
ou tenha um CLOSE DATABASES em algum ponto do fonte.
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/
Responder