Clipper On Line • Ver Tópico - letodb->browse()
Mudar para estilo Clássico
Discussão sobre Banco de Dados e RDDs para Clipper/[x]Harbour.
Postar uma resposta

letodb->browse()

21 Ago 2014 15:35

amigos, a função BROWSE() esta com um comportamento estranho utilizando o LETODB;
ao alterar o conteúdo dos registros, a visualização do arquivo não esta atualizando corretamente;
harbour 3.4 + mingw + letodb

alguns dos amigos que utiliza esta ferramenta poderia verificar esta ocorrencia;

teste.prg
Código:
Function Main

LOCAL lStatus, cPath, cRdd, lLetodb, cArq, cInd, cTag1, nCont

REQUEST LETO
REQUEST DBFCDX

SetMode(25, 80)

lLetodb:= .F.  // .T. teste com o LETO
               // .F. teste sem o LETO

if lLetodb
   cRdd:= "LETO"
   cPath := "//LOCALHOST:2812/"
else
   cRdd:= "DBFCDX"
   cPath:= diskname() + ":\" + curdir() + "\"
endif

RDDSETDEFAULT( cRdd )

cArq:=  "teste1"
cind:=  "teste2"
cTag1:= "teste3"

lStatus:= .T.
if cRdd = "LETO"
   if leto_Connect( cPath ) == -1
      lStatus:= .F.
   endif
endif

if lStatus
   dbCreate( cPath + cArq, { {"NOME","C",10, 0}, {"ORDEM", "C", 10, 0} } )

   dbUseArea( .T., cRdd , cPath + cArq, cArq, .F., .F. )

   for nCont:= 1 to 10   
      dbAppend()
      replace NOME with strzero(nCont, len(NOME)), ;
         ORDEM with str(nCont, len(NOME))
   next

   ordCreate( cPath + cInd, cTag1, "NOME",, .F. )

   ordlistClear()
   ordListAdd( cPath + cInd, cTag1)

   browse()

   dbCloseAll()

   if cRdd = "LETO"
      Leto_FErase( AtRepl( "\", cPath + cArq + ".dbf", "/" ) )
      Leto_FErase( AtRepl( "\", cPath + cInd + ".cdx", "/" ) )
   else
      Ferase( cPath + cArq + ".dbf" )
      Ferase( cPath + cInd + ".cdx" )
   endif

endif

return Nil


Tags: LetoDB

letodb->browse()

23 Ago 2014 11:00

Eu uso em um projeto pequeno o LetoDB+xHarbour, e nos browse() sempre antes de chamar uso: DBGOTOP(), Teste ai.

letodb->browse()

23 Ago 2014 14:33

leonardo,
confesso que não entendi a lógica desta sua sugestão, mas no teste.prg funcionou perfeitamente;
a minha aplicação já continha a sua sugestão, mas a tela não é atualizada corretamente, somente quando utilizo PgUp/PgDn, forçando uma atualização;
verifiquei no arquivo changelog do harbour que esta função não alterada desde a sua implementação em 1999 e talvez necessite de alguma atualização;
outra alternativa seria mudar de browse() para tbrowse();
fico muito grato pela sua colaboração;

toledo,
por gentileza, você poderia transferir este tópico de BANCO DE DADOS para HARBOUR e o título de LETODB->BROWSE() para BROWSE()->LETODB;
quem sabe o Victor veja este tópico e entenda que esta função necessite de uma atualização;

letodb->browse()

23 Ago 2014 18:56

O problema ocorre com CDX ? ou somente com o LETO ?
A função browse() não existe ela apenas faz uma chamada p/ classe tBrowseDB(), no final é tudo tBrowse().

Se for um problema do LetoDb faz um exemplo pequeno p/ que outros possam testar.
...sempre antes de chamar uso: DBGOTOP(), Teste ai.

Isso já foi corrigido. Continua com esse problema na versão do SVN ?

Saudações,
Itamar M. Lins Jr.

letodb->browse()

23 Ago 2014 20:14

Olá Pessoal,

Eu não uso (ainda) LETODB, mas pelo que ando lendo aqui no fórum ele me parece mais exigente que trabalhar em simples DBFCDX, assim, não falta o famoso COMMIT (ou equivalente) depois de Replace, ou se preferir antes de Browse()? Ou nada a ver?

letodb->browse()

24 Ago 2014 11:56

estou testando esta ferramenta deste junho, apesar de entender agora que minha opção não foi a mais acertada;

letodb não faz parte do pacote harbour e entendo que o desenvolvedor desta ferramenta entende que ela esta perfeita;

também entendo que a utilização do ferramenta letodb torna nossa lógica de programação muito mais criteriosa;

fiz um esforço muito grande para tentar trocar todos os comandos por funções, e nestas funções, outro cuidado para não deixar uma variável
diretamente relacionada a função;

entendo também que poucos amigos do forum a utilizam, e dos que utilizam, nem todos estão dispostos a dedicar um tempo para ajudar o próximo, o que torna o entendimento da ferramenta e de suas necessidades muito estressante;

em meus testes, a utilização da ferramenta dentro da própria rede mostrou-se satisfatória, mas o acesso fora da rede mostrou-se comercialmente inviável, como por exemplo, acessar uma filial pela matriz ou a implantação de um pedido remoto por um representante, além de que o acesso, até que provem o contrário, só é feito pelo ip (xxx.xxx.xx.xx), não contemplando o acesso pelo endereço (www.xxxxx.xx.com);

estas são as minhas impressões e assim sendo entendo que não cabem críticas sobre o posto;

jairo,
acrescentei sua sugestão, mas infelizmente o resultado é o mesmo;
agradeço sua colaboração;

estou testando esta ferramenta deste junho e ainda não desisti;

letodb->browse()

24 Ago 2014 12:51

Eu testei seu exemplo e a atualizacao do browse foi automatica tanto em cdx quanto em leto.

Uso Harbour3.2.

Nunca usei leto de fora de uma rede local. Transacoes no leto tbm nunca consegui usar. Tem bug q ja relatei mas parece q nunca consertaram ou pelo menos 'acharam' q isso era bug.

Janio

letodb->browse()

24 Ago 2014 14:51

janio,
agradeço sua atenção;
aparentemente o amigo jaime acertou, ou seja a utilização do comando dbCommit() após a criação do banco de dados e do arquivo de index;
no teste.prg, que reproduzo novamente abaixo, com algumas alterações, sem esta função, a atualização não é automática e com ela o problema some;
note que no teste.prg abaixo, deixei desativada função dbCommit();
por gentileza, teste novamente, com e sem a função, alterando o conteúdo com campo CAMPO01;

só que na minha aplicação, esta solução se mostrou ineficaz;

jairo,
me perdoe, mas a sua sugestão eu havia testado apenas na minha aplicação;

teste.prg
Código:
Function Main

LOCAL lStatus, cPath, cRdd, lLetodb, cArq, cInd, cTag1, nCont, nFocus

REQUEST LETO
REQUEST DBFCDX

SetMode(25, 80)

lLetodb:= .T.  // .T. teste com o LETO
               // .F. teste sem o LETO

if lLetodb
   cRdd:= "LETO"
   cPath := "//LOCALHOST:2812/"
else
   cRdd:= "DBFCDX"
   cPath:= diskname() + ":\" + curdir() + "\"
endif

RDDSETDEFAULT( cRdd )

cArq:=  "dados01"
cind:=  "index01"
cTag1:= "tag01"
nFocus:= 1

lStatus:= .T.
if cRdd = "LETO"
   if leto_Connect( cPath ) == -1
      lStatus:= .F.
   endif
endif

if lStatus
   dbCreate( cPath + cArq, { {"CAMPO01","C",10, 0}, ;
      {"CAMPO02", "C", 10, 0} } )

   dbUseArea( .T., cRdd , cPath + cArq, cArq, .F., .F. )

   for nCont:= 1 to 100   
      dbAppend()
      replace CAMPO01 with strzero(nCont, len(CAMPO01)), ;
         CAMPO02 with str(nCont, len(CAMPO02))
   next

   ordCreate( cPath + cInd, cTag1, "CAMPO01",, .F. )

   // dbCommit()

   ordlistClear()
   ordListAdd( cPath + cInd, cTag1)
   ordSetFocus(nFocus)

   @ 1, 2 say "Rdd..............: " + cRdd
   @ 2, 2 say "Banco de Dados...: " + cPath + cArq
   @ 3, 2 say "Arquivo de Index.: " + cPath + cInd
   @ 4, 2 say "Index............: " + ordName( nFocus ) + "->" + ordKey( nFocus )
   browse( 5, 0, MaxRow(), MaxCol())

   dbCloseAll()

   if cRdd = "LETO"
      Leto_FErase( AtRepl( "\", cPath + cArq + ".dbf", "/" ) )
      Leto_FErase( AtRepl( "\", cPath + cInd + ".cdx", "/" ) )
   else
      Ferase( cPath + cArq + ".dbf" )
      Ferase( cPath + cInd + ".cdx" )
   endif

endif

return Nil

letodb->browse()

24 Ago 2014 20:24

Amigos, andei fazendo alguns testes com o LetoDB, mas utilizei o TBrowse() e não o Browse.

Minduim escreveu:mas o acesso fora da rede mostrou-se comercialmente inviável, como por exemplo, acessar uma filial pela matriz ou a implantação de um pedido remoto por um representante, além de que o acesso, até que provem o contrário, só é feito pelo ip (xxx.xxx.xx.xx), não contemplando o acesso pelo endereço (www.xxxxx.xx.com);

Eu andei testando tanto em modo local (localhost ou por IP na rede local), bem como usando um endereço noip, por exemplo pctoledo.noip.me, então você pode configurar um servidor e redirecionar um endereço www.xxxx.com sem problema algum. É claro que a conexão remota vai depender muito da velocidade da sua Internet no servidor, bem como do terminal remoto.

Segue em anexo o demo que fiz os meus testes e vou deixar o LetoDB em execução no meu servidor para vocês fazerem um teste, basta executar o demoletodb.exe e selecionar a opção "Conexão Remota".

ATENÇÃO: vou deixar o LetoDB em execução no meu servidor hoje (24/08) até as 23 horas e amanhã (25/08) das 08:00 até as 23:00 horas (horário de SP).

Neste teste você podem incluir, alterar ou excluir os registros (registros com código até 5000), podem ficar a vontade. Faça uma inclusão com o seu nome para registrar a sua visita, que serão registrados com código acima de 5000, então evitem alterar ou excluir estes registros com código acima de 5000.

Abraços,
Anexos
demoletodbteste.zip
(1.11 MiB) Baixado 205 vezes

letodb->browse()

25 Ago 2014 08:48

Ja ta funcionando?

Num to conseguindo conexão

letodb->browse()

25 Ago 2014 09:33

mas o acesso fora da rede mostrou-se comercialmente inviável, como por exemplo, acessar uma filial pela matriz ou a implantação de um pedido remoto por um representante, além de que o acesso, até que provem o contrário, só é feito pelo ip (xxx.xxx.xx.xx), não contemplando o acesso pelo endereço (www.xxxxx.xx.com);


Eu uso com nomes "xxx.no-ip.net" etc... pago serviço do no-ip para 25 empresas.
Funcionam todas a contento. Lógico que sabemos as limitações da ADSL. Porém relatórios de milhares de itens de até cinco filiais estão sendo gerandos em pouco tempo. LetoDb não é resposta para tudo tem suas limitações.
Todos os problemas que foram encontrados e DEVIDAMENTE mostrados através de exemplos simples foram corrigidos.

Eu não uso transações.
E é de praxe usarmos commit após um replace num ambiente de rede isso mesmo sem usarmos o LetoDb.

Saudações,
Itamar M. Lins Jr.

letodb->browse()

25 Ago 2014 09:40

Oi Janio, o LetoDB já está em execução no meu servidor!

Eu aqui não consigo me conectar através do meu noip, pois estou dentro da minha rede, então teria que testar fora da minha rede local, mas agora não teria como. Então se mais alguém puder testar, poste aqui se conseguiu.

[Editado]
O Jairo Maia já fez o seu cadastro aqui no meu servidor, então a conexão está funcionando.

Abraços,

letodb->browse()

25 Ago 2014 10:05

Fiz outro cadastro. 25/08/14
Está ok.
Como havia dito minha ADSL 2Mb. Funcionou devidamente bem. Agora é testar com coisas mais complexas eu por exemplo abro mais de 8 DBF´s simultaneamente, são milhares de registros.

Código:
sb->(OrdScope(0,strzero(sa->numero,9)+strzero(sa->modelo,2)))
sb->(OrdScope(1,strzero(sa->numero,9)+strzero(sa->modelo,2)))


Não uso o SET RELATION, e outras coisas que encontro aqui e percebo que diminuem a velocidade do sistema vou removendo, trocando por comandos ou funções com um melhor desempenho.
Não puxo todo DBF e jogo em uma ARRAY para usar em um COMBOBOX para fazer pesquisa, a pesquisa é feita quando o usuário precisar e é limitada em n registros.

Saudações,
Itamar M. Lins Jr.

letodb->browse()

25 Ago 2014 10:29

toledo,
baixei sua postagem, executei seu aplicativo teste e deixei meu nome registrado, perfeito;
agradeço sua pronta atenção;

mas também compilei seu demoletodb.prg e não obtive conexão?
Anexos
2014-08-25_101725.jpg

letodb->browse()

25 Ago 2014 10:39

Minduim escreveu:mas também compilei seu demoletodb.prg e não obtive conexão?

A conexão remota com o meu servidor só vai funcionar com o demoletodb.exe que está no ZIP anexado na minha mensagem anterior. Se você for compilar o demoletodb.prg ai você teria que alterar o cIP:="pctoledo.noip.me" pelo endereço do seu noip ou outro endereço onde o seu LetoDB está sendo executado.

Abraços,
Postar uma resposta