Arquivo em memoria, como definir Área

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

Arquivo em memoria, como definir Área

Mensagem por porter »

Olá pessoal,
Procurei alguns exemplos aqui no fórum, mas ainda não consegui esclarecer minha dúvida.
No exemplo abaixo, memArea, é criado na Area 1, mas logo em seguida, preciso abrir um arquivo físico, que também está na Area 1,
então memArea é anulado, como faço para definir memArea na Area 99 por exemplo para abri-lo posteriormente e usa-lo ?

Código: Selecionar todos

aCampos := {}
aAdd( aCampos , { "REG"    , "C" ,  4 , 0 } )
aAdd( aCampos , { "UF"     , "C" ,  2 , 0 } )
aAdd( aCampos , { "VALOR1" , "N" ,  12, 2 } )
aAdd( aCampos , { "VALOR2" , "N" ,  12, 2 } )   
	
dbCreate( "mem:test", aCampos, "DBFCDX" , .T., "memArea" )
INDEX ON UF TO INDUF

select 1
use produtos SHARED // Aqui memArea é anulado
Harbour 3.2.0(dev)
Avatar do usuário
NiltonGM
Usuário Nível 3
Usuário Nível 3
Mensagens: 397
Registrado em: 05 Jun 2014 23:47
Localização: Caieiras/SP

Arquivo em memoria, como definir Área

Mensagem por NiltonGM »

Amigo, quando usava o Clipper com DBF eu nunca definia área, sempre usava o NEW e o clipper é que se preocupava de encontrar uma área vazia para usar.... para me referenciar ao DBF eu sempre usava o ALIAS.
Veja alguns comandos:

Código: Selecionar todos

dbUseArea( .T., "DBFNTX", "Sales", "Sales", .T. )
   dbSetIndex( "SALEFNAM" )
   dbSetIndex( "SALELNAM" )
   //
   dbUseArea( .T., "DBFNTX", "Colls", "Colls", .T. )
   dbSetIndex( "COLLFNAM" )
   dbSetIndex( "COLLLNAM" )
   //
   dbSelectArea( "Sales" )      // select "Sales" work area
   //
   IF ( Sales->(dbSeek(cLast)) )
      IF Sales->( Deleted() ) .AND. Sales->( RLock() )
         Sales->( dbRecall() )
         ? "Deleted record has been recalled."
      ENDIF
   ELSE
      ? "Not found"
   ENDIF
Nilton Medeiros
nilton@sistrom.com.br
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Arquivo em memoria, como definir Área

Mensagem por rochinha »

Amiguinhos,

Porter
Quando se usa áreas você pode direcionar de várias formas, seja, numéricamente, pelo nome do Álias ou pelo nome da tabela.

A muito não se usa mais selecionar por número da área, como exemplificado por niltonGM pois obriga a saber quem está em cada área numérica.

Para facilitar você apenas especifica o nome da tabela ou apelido passado:

Código: Selecionar todos

...
close databases
use tabela1 shared new alias nome1
use tabela2 shared new alias nome2
use tabela3 shared new alias nome3
...
select tabela2 // seleciona a segunda area
...
select nome1 // seleciona a primeira area
...
Quando você definiu uma área para o seu arquivo de memória, "memArea" você deu um apelido, portante chame-o por ele:

Código: Selecionar todos

select memArea
ou

Código: Selecionar todos

dbSelectArea( "memArea" )
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.
Responder