LetoDb e Harbour, como usar.
Moderador: Moderadores
LetoDb e Harbour, como usar.
Olá Jairo, a função exit procedure existe sim, e já esta com o leto_disconnect(). Mas a sua segunda opção é uma boa. Não tinha me atentado para isso. Vou implementar e testar. Mais um detalhe que deixei escapar. Esse banco não uso nenhum tipo de index nele, não vi a necessidade disso pois se trata de um banco com apenas um registro. Varios campos para ser exato 12 campos onde eu os incremento. Será que é por isso? Eu devo criar o index?
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
LetoDb e Harbour, como usar.
Creio que não. Mas como você está em fase de testes, seria interessante se você indexasse esse arquivo e repetisse os testes, e reportasse aqui. Reporte também se funcionou ou não o comando HardCommit,assim ficaria para registro a outros que venham ter esse problema.bwr2018 escreveu:Esse banco não uso nenhum tipo de index nele, [...]. Será que é por isso?
NOTA: lembrando que só é recomendado usar HardCommit se houver instabilidade do servidor, ou em outras palavras, se houver demora para gravar os dados em disco.
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)
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)
LetoDb e Harbour, como usar.
Perfeito Jairo, vou fazer esses testes no sábado e retorno aqui. Muito obrigado por enquanto!
LetoDb e Harbour, como usar.
Bem, disse no sábado mas a ansiedade não me deixou rsrs. Primeiro que fiz o que o colega Jairo falou mudei HardCommit = 0, para 1. O problema ainda persiste. Vou postar aqui o código completo dos testes que estou fazendo, para os amigos que se interessarem em ajudar. Lembrando que a forma que vou postar é a forma que fiz funcionar. Abrindo e fechando o banco. Mas creio que não seja a mais correta. Bom esse é um problema contornado em partes. Agora surgiu outro, que é quando cai a conexão do servidor. No caso simulei aqui somente removi o cabo da rede, o programa que rodava na estação travou e eu não consegui fazer mais nada. Somente após conectar o cabo novamente ele conseguiu restabelecer a conexão. E então o programa ficou disponível novamente. Ainda nesse teste o servidor continuou operando normal mesmo sem estar conectado a rede. Segue o codigo.
Programa
Make para compilação
Banco
Bom pessoal é isso, o caso de não atualizar se não tiver solução tudo bem. Agora esse caso do travamento caso a conexão com o servidor seja perdida isso é bem ruim acaba inviabilizando o uso da ferramenta. Será que existe algum tratamento para isso alguma maneira de esta sempre verificando se a conexão ainda esta ativa? Fico no aguardo muito obrigado por enquanto.
Programa
Código: Selecionar todos
#define FILE_LOCAL "/home/bruno/server/banco.dbf"
#define FILE_LETODB "/usr/local/bin/letodb"
#define FILE_SERVER "banco.dbf"
#define NETSERVER "192.168.0.1"
#define NETPORT "2812"
request RDDLETO
memvar getlist
field INCSERV1
field INCSERV2
field INCSERV3
field INCSERV4
field INCSERV5
field INCSERV6
field INCSERV7
field INCLOCAL1
field INCLOCAL2
field INCLOCAL3
field INCLOCAL4
field INCLOCAL5
field INCLOCAL6
field INCLOCAL7
procedure main(param1)
local secs,tk
set date british
set date format "dd/mm/yyyy"
set century on
init_database()
if ( empty( param1 ) )
cls
? "./browse 0 - para iniciar como servidora"
? "./browse 1 - para iniciar como estacao"
quit
endif
if ( param1 == '0' )
init_service_leto()
endif
if leto_Connect( "//"+NETSERVER+":"+NETPORT+"/" ) == -1
alert("Sem conexao")
clear all
close all
quit
endif
cls
secs := abs(seconds())
do while .t.
tk := inkey(0.1)
if tk == 27
quit
endif
if tk == 13
dbselectarea("W")
dbxput( "INCLOCAL1", INCLOCAL1 + 1 )
dbxput( "INCLOCAL2", INCLOCAL2 + 1 )
dbxput( "INCLOCAL3", INCLOCAL3 + 1 )
dbxput( "INCLOCAL4", INCLOCAL4 + 1 )
dbxput( "INCLOCAL5", INCLOCAL5 + 1 )
dbxput( "INCLOCAL6", INCLOCAL6 + 1 )
dbxput( "INCLOCAL7", INCLOCAL7 + 1 )
USE FILE_SERVER SHARED NEW ALIAS LAN
if neterr() .or. empty( alias() )
alert("Erro ao abrir banco de dados")
else
dbselectarea("LAN")
endif
dbxput_server( "INCSERV1", INCSERV1 + 1 )
dbxput_server( "INCSERV2", INCSERV2 + 1 )
dbxput_server( "INCSERV3", INCSERV3 + 1 )
dbxput_server( "INCSERV4", INCSERV4 + 1 )
dbxput_server( "INCSERV5", INCSERV5 + 1 )
dbxput_server( "INCSERV6", INCSERV6 + 1 )
dbxput_server( "INCSERV7", INCSERV7 + 1 )
update_dbf()
LAN->( dbclosearea() )
endif
if abs( seconds() - secs ) > 0.3
dbselectarea("W")
@ 0,43 say "BANCO LOCAL"
@ 2,41 say "INCREMENTO 1: "+alltrim(str(INCLOCAL1))
@ 3,41 say "INCREMENTO 2: "+alltrim(str(INCLOCAL2))
@ 4,41 say "INCREMENTO 3: "+alltrim(str(INCLOCAL3))
@ 5,41 say "INCREMENTO 4: "+alltrim(str(INCLOCAL4))
@ 6,41 say "INCREMENTO 5: "+alltrim(str(INCLOCAL5))
@ 7,41 say "INCREMENTO 6: "+alltrim(str(INCLOCAL6))
@ 8,41 say "INCREMENTO 7: "+alltrim(str(INCLOCAL7))
USE FILE_SERVER SHARED NEW ALIAS LAN
if neterr() .or. empty( alias() )
alert("Erro ao abrir banco de dados")
else
dbselectarea("LAN")
endif
@ 0,3 say "BANCO SERVIDOR"
@ 2,1 say "INCREMENTO 1: "+alltrim(str(INCSERV1))
@ 3,1 say "INCREMENTO 2: "+alltrim(str(INCSERV2))
@ 4,1 say "INCREMENTO 3: "+alltrim(str(INCSERV3))
@ 5,1 say "INCREMENTO 4: "+alltrim(str(INCSERV4))
@ 6,1 say "INCREMENTO 5: "+alltrim(str(INCSERV5))
@ 7,1 say "INCREMENTO 6: "+alltrim(str(INCSERV6))
@ 8,1 say "INCREMENTO 7: "+alltrim(str(INCSERV7))
LAN->( dbclosearea() )
secs := abs( seconds() )
endif
enddo
leto_disconnect()
quit
procedure init_service_leto
cls
? "Iniciando letodb..."
hb_run(FILE_LETODB)
? "Letodb iniciado...."
inkey(3)
return
procedure init_database
local cDbf_File := "banco.dbf"
if file(cDbf_File)
dbusearea(.t., NIL, cDbf_File, "W", NIL, .f.)
else
cls
alert(cDbf_File+" nao encontrada!")
quit
endif
return
procedure dbxput(local1,local2)
field->&local1 := local2
return
procedure dbxput_server(cField, xValor)
do while .t.
if ( LAN->( dbrlock() ) )
field->&cField := xValor
LAN->( dbunlock() )
exit
else
alert("Sem conexao")
exit
endif
enddo
return
procedure update_dbf
dbcommitall()
return
Código: Selecionar todos
-obrowse
-w3
-es2
-lrddleto
browse.prg
Código: Selecionar todos
//REQUEST DBFCDX
memvar getlist
procedure main
local aDbf := {}
set date british
set date format "dd/mm/yyyy"
setcancel(.f.)
set century on
aadd(aDbf,{"INCSERV1" , "N", 12, 4})
aadd(aDbf,{"INCSERV2" , "N", 12, 4})
aadd(aDbf,{"INCSERV3" , "N", 12, 4})
aadd(aDbf,{"INCSERV4" , "N", 12, 4})
aadd(aDbf,{"INCSERV5" , "N", 12, 4})
aadd(aDbf,{"INCSERV6" , "N", 12, 4})
aadd(aDbf,{"INCSERV7" , "N", 12, 4})
ferase("base.dbf")
//dbCreate( "base.dbf", aDbf, "DBFCDX", .T., "W" )
DbCreate("base.dbf", aDbf,,.t.,"W")
W->(dbAppend())
W->INCSERV1 := 0
W->INCSERV2 := 0
W->INCSERV3 := 0
W->INCSERV4 := 0
W->INCSERV5 := 0
W->INCSERV6 := 0
W->INCSERV7 := 0
commit
clear all
close all
quit
LetoDb e Harbour, como usar.
Olá eu trocaria:
leto_Connect( "//"+NETSERVER+":"+NETPORT+"/" )
Por
leto_Connect( "//"+NETSERVER+":"+NETPORT+"/", , , -1 )
leto_Connect( "//"+NETSERVER+":"+NETPORT+"/" )
Por
leto_Connect( "//"+NETSERVER+":"+NETPORT+"/", , , -1 )
►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)
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)
LetoDb e Harbour, como usar.
Olá,bwr2018 escreveu:Olá, e qual é a diferença amigo?
Eu tinha alguns problemas com acesso a tabelas, modifiquei o parâmetro de timeout para -1 e nunca mais tive problemas.
Agora as respostas para as suas perguntas estão no arquivo ChangeLog.txt pra saber das correções/novidades e no readme.txt que é o manual.
Outra coisa importante mantenha sempre atualizada a versão do letodbf, eu faço assim antes de atualizar faço uma cópia da versão em uso (backup) qq comportamento fora do normal uso a versão anterior.
►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)
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)
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
LetoDb e Harbour, como usar.
Ola!
Mas continuo sem entender nada. A Conexão tem ficar ativa o tempo TODO mesmo, se cair congela a aplicação! Não é assim com qualquer programa ?
Qual é o programa que "em usando" a rede e a conexão cair, continua funcionando ?
Saudações,
Itamar M. Lins Jr.
E é para acontecer o quê neste caso ? Eu não estou entendendo.Agora esse caso do travamento caso a conexão com o servidor seja perdida isso é bem ruim acaba inviabilizando o uso da ferramenta.
Código: Selecionar todos
HardCommit = 0 - if 0, SET HARDCOMMIT OFF, this is now DEFAULT.
It is recommended for UNSTABLE running server to set it to <1>,
which means that each change at data tables are immedeate written to
harddrive bypassing the OS cache.
Expect significant reduced performance with setting '1'.
No caso da pergunta acima, a resposta está no capitulo 7.1 do arquivo Readme.txt do LetoDbf.Será que existe algum tratamento para isso alguma maneira de esta sempre verificando se a conexão ainda esta ativa?
Mas continuo sem entender nada. A Conexão tem ficar ativa o tempo TODO mesmo, se cair congela a aplicação! Não é assim com qualquer programa ?
Qual é o programa que "em usando" a rede e a conexão cair, continua funcionando ?
Código: Selecionar todos
LETO_DETECT( [ cService ],[ nNrOfPossible ],[ nPort ] ) ==> cServerIP
This functions sends a broadcast into the local network, to all available interfaces,
(virtual) interfaces loopback (lo) and other without MAC address are excluded from that.
Default <cService> is "letodb", and this is correlating to the server side:
see in example letodb.ini for config option: BC_Services = letodb;
Such configured LetoDBf server then will respond to this query with its IP/Port,
where <cServerIP> is in the format: "//9.9.9.9:2812/" to be used i.e. to connect
to the server: Leto_Connect( Leto_Detect() ),
With <nNrOfPossible> can be selected between multiple server responding to same service name.
Alternative to new build-in at server was before a standalone exe: 8.2. 'Uhura'
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
LetoDb e Harbour, como usar.
Ola!
Uhura é uma homenagem ao personagem de Jornada Nas Estrelas.
Saudações,
Itamar M. Lins Jr.
Uhura é uma homenagem ao personagem de Jornada Nas Estrelas.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
LetoDb e Harbour, como usar.
Para verificar se a conexão está ativa basta usar a dica do Itamar acima, já para evitar o "travamento", basta NÃO usar TimeOut = -1.bwr2018 escreveu: Agora esse caso do travamento caso a conexão com o servidor seja perdida isso é bem ruim acaba inviabilizando o uso da ferramenta. Será que existe algum tratamento para isso alguma maneira de esta sempre verificando se a conexão ainda esta ativa?
Assim, quando perder a conexão com o servidor o comportamento será como qualquer outro sistema, como sua internet por exemplo, ou seja, "morre tudo".
TimeOut = -1 - Connection timeout in seconds, -1 means infinite wait.
This timeout determine, how long a write to network/ wait for requested workarea
will wait to succeed, before the thread for the connection give up.
If used: Zombie_Check, this value shell be shorter than that.
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)
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)
LetoDb e Harbour, como usar.
Por acaso trabalha com plugin de banco ? gaspro ou outro ?, antivirus também interfere, isso acontece em mais de uma estação ?
►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)
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)
LetoDb e Harbour, como usar.
E é para acontecer o quê neste caso ? Eu não estou entendendo.Itamar M. Lins Jr. escreveu:Ola!E é para acontecer o quê neste caso ? Eu não estou entendendo.Agora esse caso do travamento caso a conexão com o servidor seja perdida isso é bem ruim acaba inviabilizando o uso da ferramenta.
Código: Selecionar todos
HardCommit = 0 - if 0, SET HARDCOMMIT OFF, this is now DEFAULT. It is recommended for UNSTABLE running server to set it to <1>, which means that each change at data tables are immedeate written to harddrive bypassing the OS cache. Expect significant reduced performance with setting '1'.No caso da pergunta acima, a resposta está no capitulo 7.1 do arquivo Readme.txt do LetoDbf.Será que existe algum tratamento para isso alguma maneira de esta sempre verificando se a conexão ainda esta ativa?
Mas continuo sem entender nada. A Conexão tem ficar ativa o tempo TODO mesmo, se cair congela a aplicação! Não é assim com qualquer programa ?
Qual é o programa que "em usando" a rede e a conexão cair, continua funcionando ?Saudações,Código: Selecionar todos
LETO_DETECT( [ cService ],[ nNrOfPossible ],[ nPort ] ) ==> cServerIP This functions sends a broadcast into the local network, to all available interfaces, (virtual) interfaces loopback (lo) and other without MAC address are excluded from that. Default <cService> is "letodb", and this is correlating to the server side: see in example letodb.ini for config option: BC_Services = letodb; Such configured LetoDBf server then will respond to this query with its IP/Port, where <cServerIP> is in the format: "//9.9.9.9:2812/" to be used i.e. to connect to the server: Leto_Connect( Leto_Detect() ), With <nNrOfPossible> can be selected between multiple server responding to same service name. Alternative to new build-in at server was before a standalone exe: 8.2. 'Uhura'
Itamar M. Lins Jr.
R: Eu penso que eu tinha que ter pelo menos a chance de interceptar esse travamento.
A Conexão tem ficar ativa o tempo TODO mesmo, se cair congela a aplicação!
R: Não em entendi o seu "TODO"
Não é assim com qualquer programa ?
R: Não, ou pelo menos algo que informe que a conexão caiu.
Qual é o programa que "em usando" a rede e a conexão cair, continua funcionando ?
R: Qualquer programa que façamos um tratamento para isso. Visto que eu tenho o mesmo banco no servidor o no local. Acho que o amigo não leu meu codigo ou passou despercebido. Pois eu faço o mesmo incremento no servidor e no local. Então se a conexão com o servidor cair eu sigo usando o banco local. Desde que eu tenha a CHANCE de perceber ou detectar que a conexão caiu.
LetoDb e Harbour, como usar.
Olá Jairo, vou verificar o TimeOut, confesso editei muito pouco o meu letodb.ini e tbm meu conhecimento em rede é muito mas muito raso. Então agradeço demais toda ajuda de vcs.Jairo Maia escreveu:Para verificar se a conexão está ativa basta usar a dica do Itamar acima, já para evitar o "travamento", basta NÃO usar TimeOut = -1.bwr2018 escreveu: Agora esse caso do travamento caso a conexão com o servidor seja perdida isso é bem ruim acaba inviabilizando o uso da ferramenta. Será que existe algum tratamento para isso alguma maneira de esta sempre verificando se a conexão ainda esta ativa?
Assim, quando perder a conexão com o servidor o comportamento será como qualquer outro sistema, como sua internet por exemplo, ou seja, "morre tudo".
TimeOut = -1 - Connection timeout in seconds, -1 means infinite wait.
This timeout determine, how long a write to network/ wait for requested workarea
will wait to succeed, before the thread for the connection give up.
If used: Zombie_Check, this value shell be shorter than that.
LetoDb e Harbour, como usar.
Ola asimoes, não cara estou em fase de testes ainda usando um distro linux slackware 13.1 até bem antiga mas sempre me dei bem com ela. Confesso que nem sei o que são esses plugins que vc citou. E sim, acontece em todas estações. Se eu desconectar o cabo da servidora todas outras congelam.asimoes escreveu:Por acaso trabalha com plugin de banco ? gaspro ou outro ?, antivirus também interfere, isso acontece em mais de uma estação ?
LetoDb e Harbour, como usar.
Segue como está meu letodb.ini, não mudei nada do original a não ser [Server], [Port] e [DataPath].
Server = 192.168.0.1
Port = 2812
DataPath = /home/bruno/server
;LogPath = /tmp
Default_Driver = CDX
;Lock_Scheme = 6
;Memo_Type = FPT
Share_Tables = 0
No_Save_WA = 1
Lower_Path = 0
EnableFileFunc = 1
EnableAnyExt = 1
Allow_UDF = 1
Pass_for_Login = 0
Pass_for_Manage = 0
Pass_for_Data = 0
;Pass_File = leto_users
Cache_Records = 21
;Max_Vars_Number = 1000
;Max_Var_Size = 67108864
;Tables_Max = 999
;Users_Max = 99
Debug = 1
Optimize = 1
;AutOrder = 0
;ForceOpt = 0
;TimeOut = 360
;Zombie_Check = 0
;Server_User = advantage
;Server_UID = 1000
;Server_GID = 4
;BC_Services = letodb;
;BC_Interface = eth2
;BC_Port = 2812
;SMB_SERVER = 1
DataBase = /
Backup = /tmp/backup
Mask = *.dbf,*.dbt,*.ntx
Lock = 1
Seconds = 30
Wait = 1
ArcCmd = tar -cvzf /tmp/backup/leto.tar.gz /tmp/backup/*
Server = 192.168.0.1
Port = 2812
DataPath = /home/bruno/server
;LogPath = /tmp
Default_Driver = CDX
;Lock_Scheme = 6
;Memo_Type = FPT
Share_Tables = 0
No_Save_WA = 1
Lower_Path = 0
EnableFileFunc = 1
EnableAnyExt = 1
Allow_UDF = 1
Pass_for_Login = 0
Pass_for_Manage = 0
Pass_for_Data = 0
;Pass_File = leto_users
Cache_Records = 21
;Max_Vars_Number = 1000
;Max_Var_Size = 67108864
;Tables_Max = 999
;Users_Max = 99
Debug = 1
Optimize = 1
;AutOrder = 0
;ForceOpt = 0
;TimeOut = 360
;Zombie_Check = 0
;Server_User = advantage
;Server_UID = 1000
;Server_GID = 4
;BC_Services = letodb;
;BC_Interface = eth2
;BC_Port = 2812
;SMB_SERVER = 1
DataBase = /
Backup = /tmp/backup
Mask = *.dbf,*.dbt,*.ntx
Lock = 1
Seconds = 30
Wait = 1
ArcCmd = tar -cvzf /tmp/backup/leto.tar.gz /tmp/backup/*

