Página 1 de 2
letodb->browse()
Enviado: 21 Ago 2014 15:35
por Minduim
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: Selecionar todos
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()
Enviado: 23 Ago 2014 11:00
por sygecom
Eu uso em um projeto pequeno o LetoDB+xHarbour, e nos browse() sempre antes de chamar uso: DBGOTOP(), Teste ai.
letodb->browse()
Enviado: 23 Ago 2014 14:33
por Minduim
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()
Enviado: 23 Ago 2014 18:56
por Itamar M. Lins Jr.
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()
Enviado: 23 Ago 2014 20:14
por Jairo Maia
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()
Enviado: 24 Ago 2014 11:56
por Minduim
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()
Enviado: 24 Ago 2014 12:51
por janio
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()
Enviado: 24 Ago 2014 14:51
por Minduim
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: Selecionar todos
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()
Enviado: 24 Ago 2014 20:24
por Toledo
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,
letodb->browse()
Enviado: 25 Ago 2014 08:48
por janio
Ja ta funcionando?
Num to conseguindo conexão
letodb->browse()
Enviado: 25 Ago 2014 09:33
por Itamar M. Lins Jr.
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()
Enviado: 25 Ago 2014 09:40
por Toledo
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()
Enviado: 25 Ago 2014 10:05
por Itamar M. Lins Jr.
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: Selecionar todos
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()
Enviado: 25 Ago 2014 10:29
por Minduim
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?
letodb->browse()
Enviado: 25 Ago 2014 10:39
por Toledo
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,