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
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