Página 1 de 1
Limite de Replace com Ledodb ??
Enviado: 05 Fev 2020 23:29
por Nascimento
Amigos só tirando uma duvida
meu sistema esta funcionando com o letodb , ainda aprendendo mais e mais usar ele
as vezes me deparo com coisas que são inexplicaveis para mim por exemplo:
Código: Selecionar todos
Select Mydbf
if Rlock()
replace a with b
......
.......
endif
em alguns casos da ERRO LETO/1022 travamento requerido
ja verifiquei se consegue bloquear o registro , e sim me retornou a .t. mesmo assim da o erro citado abaixo
então troco para flock() e replaça normalmente
algum amigo ja passou por isso e conseguiu resolver?
suspeito que seja algo no letodb.ini
Limite de Replace com Ledodb ??
Enviado: 05 Fev 2020 23:39
por Itamar M. Lins Jr.
Ola!
Letodb ou LetoDbf ?
Aqui esse erro dá quando cai a rede.
Colocar o arquivo letodb.ini para analise
Saudações,
Itamar M. Lins Jr.
Limite de Replace com Ledodb ??
Enviado: 06 Fev 2020 00:00
por Nascimento
Itamar M. Lins Jr. escreveu:Ola!
Letodb ou LetoDbf ?
Aqui esse erro dá quando cai a rede.
Colocar o arquivo letodb.ini para analise
Saudações,
Itamar M. Lins Jr.
Nobre é o Letodbf do elch
e salvo engano quando cai a rede é outro codigo de erro
o que dificulta um pouco é o leto não ter o codigo de erro , não sei se é porque ele
usa o mesmo do dbf/cdx
no entanto a rede não cai , porque se eu colocar Flock() ao invés do Rlock() replaça tudo normalmente
;Server = 192.168.2.47
;IP = 192.168.2.47
Port = 2812
DataPath = D:/Motel/Dados/
;LogPath = /tmp
Default_Driver = CDX
;Lock_Scheme = 6
;Memo_Type = FPT
Share_Tables = 1
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 =d:/Dados/
Backup = /tmp/backup
Mask = *.dbf,*.dbt,*.ntx
Lock = 1
Seconds = 30
Wait = 1
ArcCmd = tar -cvzf /tmp/backup/leto.tar.gz /tmp/backup/*
fiz até testes de funcionamento remoto, e funcionou normalzinho , através de servidores Mikrotik , no geral quem tem internet de bairro "gato net" usam muito esses servidores
Limite de Replace com Ledodb ??
Enviado: 06 Fev 2020 07:30
por Itamar M. Lins Jr.
Ola!
Por acaso esta pasta está com acesso exclusivo pelo letodb ou tem mais programas acessando tipo googledrive, onedrive ?
Ou outro programa harbour abrindo o DBF por fora do letodbf ?
Saudações,
Itamar M. Lins Jr.
Limite de Replace com Ledodb ??
Enviado: 06 Fev 2020 10:56
por Nascimento
Itamar M. Lins Jr. escreveu:Ola!
Por acaso esta pasta está com acesso exclusivo pelo letodb ou tem mais programas acessando tipo googledrive, onedrive ?
Ou outro programa harbour abrindo o DBF por fora do letodbf ?
Saudações,
Itamar M. Lins Jr.
Não nobre só o próprio sistema mesmo
segue a foto abaixo

- este é o erro que ocorre quando eu coloco rlock() se eu por flock() o erro somo
não sei se vai adiantar muito mais esta abaixo um pedaço do codigo onde esta ocasionando o problema
Código: Selecionar todos
Static Procedure Atualiza_Entrada()
local nWindow := Thiswindow.name
local num_doc := Trim(GetProperty(nWindow,"tx_num_doc","value"))
local nomepag:= ''
local oldreg:= 0
local soma := 0
local totn := 0
local chave
local nome_bord := ''
local cTxtPrint := ''
local dif := .f.
select ent
set order to 2
seek num_doc
if (Eof())
*
Return Nil
elseif (atualiza .and. Empty(destino))
*
elseif (!atualiza .and. !Empty(destino))
*
endif
oldreg:= RecNo()
do case
case ent->condpag = "2"
nomepag:= "DUPLICATA"
case ent->condpag = "3"
nomepag:= "CARTEIRA"
case ent->condpag = "4"
nomepag:= "CHEQUE PRE-DATADO"
case ent->condpag = "1"
nomepag:= "A VISTA"
endcase
totn:= ent->totalnota - ent->imposto - ent->desconto
* soma os valores dos produtos
do while (!Eof())
if (Trim(ent->document) = Trim(num_doc))
soma+= ultpreco
else
exit
endif
skip
loop
enddo
st:= "NOTA DIGITADA CORRETAMENTE"
* compara os valores dos produtos com o valor da nota
if (totn != round(soma,2))
st:= "VL NOTA DIF. VL DOS PRODUTOS"
dif := .t.
endif
goto oldreg
do while (!Eof())
chave:= ent->grupo + ent->sub_grupo + ent->codigo
select mcf
seek val(chave)
if (rlock()) // se eu trocar para flock() não da o erro
replace outdesp3 with outdesp2
replace numdoc3 with numdoc2
replace frete3 with frete2
replace preuni3 with preuni2
replace dtfor3 with dtfor2
replace codfor3 with codfor2
replace qtdfor3 with qtdfor2
replace outdesp2 with outdesp1
replace numdoc2 with numdoc1
replace frete2 with frete1
replace preuni2 with preuni1
replace dtfor2 with dtfor1
replace codfor2 with codfor1
replace qtdfor2 with qtdfor1
replace numdoc1 with ent->document
replace frete1 with ent->imposto
replace preuni1 with ent->custo
replace dtfor1 with ent->emissao
replace codfor1 with ent->codfor
replace qtdfor1 with ent->qtdultcomp
replace outdesp1 with ent->desconto
replace almox_atu with almox_atu + ent->qtdultcomp
replace datamov with var4
mcf->(Dbcommit())
mcf->(Dbunlock())
endif
Limite de Replace com Ledodb ??
Enviado: 06 Fev 2020 19:43
por Itamar M. Lins Jr.
Ola!
Com certeza tem erro ai.
Pq teria que dar erro em qualquer parte que vc use rlock()
Agora, eu fico horas dias, tentando achar bugs dessas ferramentas que uso, na maioria das vezes é erro aqui meu.
Eu checo se Seek, etc...falhou em tudo eu coloco alias.
Saudações,
Itamar M. Lins Jr.
Limite de Replace com Ledodb ??
Enviado: 08 Fev 2020 20:51
por Fernando queiroz
estou tendo esse mesmo problema de bloqueio de registro, mas acontece intermitente, hora da a mensagem de RLOCK()
Acabei fazendo assim para ver o que acontece
DBSELECTAREA("ITENS")
Ordsetfocus(2)
DO WHILE ! RLOCK()
hwg_MsgInfo( "Registro em uso por outro usuário"+ HB_EOL()+ "Solicite que liberem o Item do Pedido","ATENÇÃO!!!" )
ENDDO
IF RLock()
DBDELETE()
ELSE
hwg_MsgYesNo("Item não foi excluido!!!","Falha na Exclusão")
RETURN NIL
ENDIF
Ele passa pelo DO WHILE e diz na hora de BDDELETE() que Rlock() é requerido, vai entender :% :% :%
Limite de Replace com Ledodb ??
Enviado: 08 Fev 2020 21:31
por Nascimento
bom segui a risca o que o amigo Itamar escreveu botei debug´s linha a linha e no debug o rlock() retorna a .t.
oque deduzi que não é erro no codigo "ao menos não achei"
mesmo assim da a mensagem, quando troca pra o flock() tambem retorna a .t. porém não da o erro e replaça normalmente
Limite de Replace com Ledodb ??
Enviado: 08 Fev 2020 21:47
por Itamar M. Lins Jr.
Ola!
Meu rlock:
Código: Selecionar todos
******************************
Function TravaRegistro(cAlias)
******************************
*
*
Local lRet := .T.
Hb_Default(@cAlias,Alias())
Do While .T.
If (cAlias)->(rlock())
exit
EndIf
If hwg_MsgYesNo('Registro não bloqueado, '+cAlias+' Tentar Novamente ? '+hb_eol()+"Função: "+ProcName(1))
Else
lRet := .F.
Exit
EndIf
EndDo
Return lRet
Saudações,
Itamar M. Lins Jr.
Limite de Replace com Ledodb ??
Enviado: 11 Fev 2020 21:59
por Fernando queiroz
realmente o problema era a falta do ALIAS no travamento RLOCK() , coloquei onde estava dando erro e o problema foi sanado

)

)

)
Limite de Replace com Ledodb ??
Enviado: 29 Jul 2024 18:20
por deividdjs
boa noite amigos.. estou enfrentando o mesmo problema e coloco Alias no bloqueio e mesmo assim dá o erro .. o estranho é são somente em alguns bloqueios ... e indica q é na loja do DELETE ...
Código: Selecionar todos
*------------------------*
FUNCTION bloq_reg(cAlias)
*------------------------*
LOCAL nTimeout := 10 // Tempo limite em segundos
LOCAL nStartTime := SECONDS()
// Usa o alias atual se nenhum alias for passado
Hb_Default(@cAlias, ALIAS())
MSGBOX1(cAlias) // debug
DO WHILE .T.
// Tenta obter o bloqueio no registro
IF (cAlias)->(RLOCK())
RETURN 1
ENDIF
// Verifica se o tempo limite foi atingido
IF SECONDS() - nStartTime >= nTimeout
RETURN 0 // Não conseguiu obter o bloqueio dentro do tempo limite
ENDIF
// Espera um pouco antes de tentar novamente
INKEY(0.1)
ENDDO
Código: Selecionar todos
local cCaixaLoja := "cai_" + CAI->cc_destino // arquivo caixa/banco dinamico
Bloq_reg(cCaixaLoja)
(cCaixaLoja)->(DBDELETE())//;DBSKIP(1)
unlock
Saludos,
Deivid
Limite de Replace com Ledodb ??
Enviado: 29 Jul 2024 18:53
por Itamar M. Lins Jr.
Olá!
unlock cadê o alias ?
Veja se o erro é isso. Unlock para delete ?
Dbskip() sem alias ?
Se está no select() área aberta não precisa de alias
Saudações,
Itamar M. Lins Jr.
Limite de Replace com Ledodb ??
Enviado: 29 Jul 2024 19:32
por deividdjs
ja tentei tbm e dá o mesmo erro ...
Bloq_reg(cCaixaLoja)
(cCaixaLoja)->(DBDELETE())
(cCaixaLoja)->(DBUNLOCK())
obs: sempre usei desde quando comecei a programar hehehe e em todos os meus DELETES são acompanhados de unlock q agora analisando bem não faz sendido porque o registo já nao existe hehehe
agora como disse nosso amigo nos comentarios anteriores.. quando eu bloqueio o arquivo ao inves do registro, passa normalmente e exclui o registro ...
é muito raro!!!
vai entender!
Limite de Replace com Ledodb ??
Enviado: 29 Jul 2024 19:43
por Itamar M. Lins Jr.
Olá!
Tem um erro no seu código.
USE IF
IF BLOQUEADO
APAGUE -> delete
ENDIF
Sua função de bloqueio tem que retornar .T. ou .F.
Agora vi que retorna 0 ou 1 mas vc não faz tratamento.
Saudações,
Itamar M. Lins Jr.
Limite de Replace com Ledodb ??
Enviado: 30 Jul 2024 07:17
por deividdjs
Devia ter seguidos seus conselhos dos postes anteriores.. o problema era justo em um arquivo de índices dinâmico q não estava sendo criado as TAGS porque estava com mais de 10 carácteres.. erro bissaro!! Então quando ia buscar bugava no delete ao invés do dar erro no FOUND() … com o leto tem q insmiuçar no último pra achar a falha hehhe Vlw Itamar! Desculpa minha ignorância rsrs