Tamanho máximo do DBF e Informações LETODB

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

Moderador: Moderadores

Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Re: Tamanho máximo do DBF.

Mensagem por Hasse »

OK.

Leonardo:
Vou fazer os testes conforme instruções.

Itamar:
O arquivo "letodb.ini" já está configurado.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Re: Tamanho máximo do DBF.

Mensagem por Hasse »

Olá.

Conexão estabelecida: :))
Leto_File() funcionando;
FILE() funcionando;
DbUseArea() funcionando;
USE funcionando.

Coisa simples que estava faltando ( "as lamparinas ainda estão acendendo... mal chegou na penumbra..." ) :-)

Código: Selecionar todos

   REQUEST DBFCDX
   RDDSETDEFAULT( "DBFCDX" )
   DBSETDRIVER( "DBFCDX" )
Valeu mesmo, amigos. Eu sempre afirmo, este é o melhor Fórum que conheço.

Pergunta-1: o arquivo "LetoDb.ini" precisa estar só no Servidor, correto ?
No meu caso, o Path:
DataPath = D:/clipper/datafio/
Está correto ?

Pergunta-2: Quando houverem 2 partições compartilhadas. Como o LetoDb vai direcionar para o correto ? Isto seria feito no "DataPath = D:/clipper/datafio/" ?
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Tamanho máximo do DBF.

Mensagem por sygecom »

Olá Hasse,
Hasse escreveu: Pergunta-1: o arquivo "LetoDb.ini" precisa estar só no Servidor, correto ?
Isso mesmo , apenas no lado servidor.
No meu caso, o Path:
DataPath = D:/clipper/datafio/
Está correto ?
Correto.
Pergunta-2: Quando houverem 2 partições compartilhadas. Como o LetoDb vai direcionar para o correto ? Isto seria feito no "DataPath = D:/clipper/datafio/" ?
Bom, na pratica não testei, mas teoricamente falando você tem dua saidas.
1º-Seria definir duas porta diferentes para cada Letodb.ini no servidor, ou seja você terá dois modulos de server rodando no lado servidor e no letodb.ini você defini um com Port = 2812 e outro com Port = 2813.
2º-Seria ter uma pasta monitorada e definida no letodb.ini em DataPath = e dentro dessa pasta você tem as duas pasta que serão monitoradas, claro que para isso você terá que usar no seus sistemas o direcionamento da pasta definida em DataPath= em diante.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
rafael
Usuário Nível 1
Usuário Nível 1
Mensagens: 43
Registrado em: 14 Ago 2003 10:28
Localização: Londrina - PR

Re: Tamanho máximo do DBF.

Mensagem por rafael »

Olá Amigos,

Só para deixar registrado tenho um DBF com 7.200.000 e 800 megas com 2 indices CDX.
Abre e reindexa que nem uma pena.

Xharbour 1.2.0 Linux.
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Re: Tamanho máximo do DBF.

Mensagem por Hasse »

Olá.

Sygecom: A tua sugestão funcionou perfeitamente. Veja o código que usei:

Código: Selecionar todos

Function Main()
   LOCAL cServerIP1 := '//10.0.0.3:2812'
   LOCAL cServerIP2 := '//10.0.0.3:2813'
   LOCAL cPath1     := '/clipper/datafio/'
   LOCAL cPath2     := '/clipper/datafio/safe/'
   LOCAL cFile1     := 'Cadastro'
   LOCAL cFile2     := 'Safe'
   REQUEST LETO
   RDDSETDEFAULT( "LETO" )
   REQUEST DBFCDX
   RDDSETDEFAULT( "DBFCDX" )
   DBSETDRIVER( "DBFCDX" )

   Clear
   IF ( leto_Connect( cServerIP1 ) ) == -1
      ? 'NÆo h  conexÆo com o Servidor:=' + cServerIP1
      Return .F.
   ELSE
      ? 'ConexÆo estabelecida com o Servidor:=' + cServerIP1
   ENDIF
   Inkey( 0.1 )
   ?
   cArq1 := cPath1 + cFile1
   DBUseArea( .T., 'DBFCDX', cArq1, cFile1 , .F. )
   ? dbf()
   Inkey( 0.1 )
   ?
   IF ( leto_Connect( cServerIP2 ) ) == -1
      ? 'NÆo h  conexÆo com o Servidor:=' + cServerIP2
      Return .F.
   ELSE
      ? 'ConexÆo estabelecida com o Servidor:=' + cServerIP2
   ENDIF
   Inkey( 0.1 )
   ?
   cArq2 := cPath2 + cFile2
   DBUseArea( .T., 'DBFCDX', cArq2, cFile2, .F. )
   ? dbf()
   Inkey( 0.1 )
   ?
   DbSelectAr( cFile1 )
   ? dbf()
   ?
   DbSelectAr( cFile2 )
   ? dbf()
   ?
   ? "Encerrando a conexÆo atual...."
   Leto_Disconnect()
   Inkey( 0.1 )
   *
Return( nil )
Mais perguntas:

1-No mesmo executável, preciso acessar arquivos remotos (via LetoDB) e também arquivos no HD local. Como proceder ?

2-No caso das funções Leto_BeginTransaction(), Leto_RollBack(), Leto_CommitTransaction(): Imagino que sejam de uso opcional ? É que eu tentei gravar dados sem eles e funcionou.

3-Se usada a Leto_BeginTransaction(), dados enviados via função PutFile(), estes dados ficariam aguardando no Buffer até receber a Leto_CommitTransaction() ?

4-Se a Leto_RollBack() for usada antes do CommitTransaction() os dados do Buffer seriam zerados e nenhum dados gravado no HD ?

5-Como ficam estes dados, se antes do Leto_CommitTransaction(), a conexão fosse perdida por algum motivo fora do nosso controle ? Os dados são gravados ?

Em tempo: Acredito que conseguimos fazer uma baita salada de assuntos neste tópico. Não seria uma boa idéia separar os assuntos em 2 tópicos ?
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
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

Re: Tamanho máximo do DBF.

Mensagem por Itamar M. Lins Jr. »

Ola!

Código: Selecionar todos

 Não precisa destas linhas.
 REQUEST DBFCDX
 RDDSETDEFAULT( "DBFCDX" )
 DBSETDRIVER( "DBFCDX" )
 E essa deve ser assim:
 DBUseArea( .T., 'LETO', cArq1, cFile1 , .F. ) //Não 'DBFCDX'
1a. Questão.
É só setar no comando dbusearea. Por exemplo, DbUseArea(.t.,'DBFCDX','c:\dados\estoq.dbf','eq',.f.)
Lembrando que se for via DBFCDX não pode ser acessado simultaneamente via LETO.
2a)É opcional
3a)Só testando.
4a)Creio que não.
5a)Só testando uma vez que é opcional.
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

Re: Tamanho máximo do DBF.

Mensagem por asimoes »

1-No mesmo executável, preciso acessar arquivos remotos (via LetoDB) e também arquivos no HD local. Como proceder ?
Sendo remoto: (não esquecer de liberar a porta 2813 no roteador/modem) Eu uso o dyndns (www.dyndns.com) para acesso remoto.

Código: Selecionar todos

//Acesso Remoto:
cServer1:='//xxxx.dyndns.org:2813/'
//Acesso local:
cServer2:='//192.168.0.1:2812/' ou 
cServer2:='//localhost:2812/'
lRemoto:=.T.
lLocal   :=.T.
//-------------------------------------------------------------------
IF leto_Connect( cServer1 ) == -1
   Alert( "Não consegui acessar o servidor remoto..." )
   lRemoto:=.F.
ENDIF
IF leto_Connect( cServer2 ) == -1
   Alert( "Não consegui acessar o servidor local..." )
   lLocal:=.F.
ENDIF
if lRemoto
   DBUseArea(.T.,,cServer1+'MAINFILE','MAINFILE',.T.)
   SET INDEX TO (cServer1 + "MAINCDX")
endif
if lLocal
   DBUseArea(.T.,,cServer2+'TELEPHON','TELEPHON',.T.)
   SET INDEX TO (cServer2 + "TELECDX")
endif 
Funciona beleza.
►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
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Tamanho máximo do DBF.

Mensagem por sygecom »

Olá Hasse,
Hasse escreveu: 1-No mesmo executável, preciso acessar arquivos remotos (via LetoDB) e também arquivos no HD local. Como proceder ?
Ficaria Assim:

Código: Selecionar todos

Function main()
   REQUEST LETO
   REQUEST DBFCDX
   RDDSETDEFAULT( "LETO" )  // tudo que abrir como padrão sem informar o driver vai ser pelo LETODB
   DBSETDRIVER( "LETO" )

   DBSELECTAREA(0) // SELECIONA A PROXIMA AREA LIVRE
   DBUseArea(.T.,,cServer1+'MAINFILE','MAINFILE',.T.)  // vai abrir pelo banco padrão, nesse caso usando o LETODB

   DBSELECTAREA(0) // SELECIONA A PROXIMA AREA LIVRE
   DBUseArea(.T.,"DBFCDX",'MAINFILE','MAINFILE',.T.)  // vai abrir pelo banco LOCAL
...
...
...
Return
2-No caso das funções Leto_BeginTransaction(), Leto_RollBack(), Leto_CommitTransaction(): Imagino que sejam de uso opcional ? É que eu tentei gravar dados sem eles e funcionou.
Sim, são opcionais, mas é um recurso deveras importante e muito bom que hoje só tem em bancos de dados Relacionais.
3-Se usada a Leto_BeginTransaction(), dados enviados via função PutFile(), estes dados ficariam aguardando no Buffer até receber a Leto_CommitTransaction() ?
Isso mesmo, ou se você der um Leto_RollBack() ele desfaz o que foi feito até o inicio da transação.
4-Se a Leto_RollBack() for usada antes do CommitTransaction() os dados do Buffer seriam zerados e nenhum dados gravado no HD ?
Na verdade quando você inicia uma transação(Leto_BeginTransaction()) ele só registra no banco de dados, depois que você der um Leto_CommitTransaction(), se nesse meio tempo der algum erro ou você em vez de mandar o Leto_CommitTransaction() mandar um Leto_RollBack(), ele não envia ou desfaz o que foi feito apartir do ponto que iniciou a transação.
5-Como ficam estes dados, se antes do Leto_CommitTransaction(), a conexão fosse perdida por algum motivo fora do nosso controle ? Os dados são gravados ?
Sempre que você inicia um transação( Leto_BeginTransaction()) o letodb guarda essas supostas gravações no buffer local e somente commita(grava) no banco de dados(.dbf) depois que você der um Leto_CommitTransaction().
Em tempo: Acredito que conseguimos fazer uma baita salada de assuntos neste tópico. Não seria uma boa idéia separar os assuntos em 2 tópicos ?
Bom, acho que está bem mais relacionado a LETODB do que a tamanho de DBF, vou apenas adicionar o LETODB ao nome do topico.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Re: Tamanho máximo do DBF.

Mensagem por Hasse »

Valeu Leonardo e Asimoes.

As explicações são muito importantes e deixaram o assunto bem claro.

Obrigado.

Concordo que o tópico pode ter seu assunto alterado.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Responder