Gravação duplicando

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

rbonotto
Usuário Nível 3
Usuário Nível 3
Mensagens: 253
Registrado em: 06 Mai 2005 18:52

Gravação duplicando

Mensagem por rbonotto »

Bom dia, estou com um problema esquisito em uma rotina bem simples:

Código: Selecionar todos

   WHILE .T.
      IF ADIREG()
         tp_pg->comanda  := mYcomm
         tp_pg->caixa    := cX_rEg_
         tp_pg->din      := pDin
         tp_pg->ch       := pChe
         tp_pg->cart     := pCar
         tp_pg->tik      := pTkk
         tp_pg->contacor := pTcont
         tp_pg->data     := _dIasIst 
         tp_pg->hora     := TIME()
         tp_pg->troco    := _tRoc
         tp_pg->funcn    := mYoPer
         tp_pg->tele     := tElDoCli
         tp_pg->taxas    := fTgar
         tp_pg->tipo     := tPvenda
         UNLOCK
      ELSE
         esp()
         LOOP
      END
      EXIT
   END

   
   A função ADIREG()
   
   DBAPPEND()
   IF .NOT. NETERR()
      RETURN(.t.)
   ELSE
      RETURN( .f. )
   END
Logo depois os bancos de dados são fechados e o programa retorna para a pagina inicial.

Porem uma a cada 50/60 vezes a rotina acima grava DUAS VEZES os dados, e quando vou conferir no campo hora esta com os mesmos hora/minutos/segundos...

O programa esta em uma rede com 15 micros e o SO é Windows 7 64bits

Abraços,
Nota de Moderação:
por Pablo César: Título re-editado.
Editado pela última vez por Pablo César em 25 Mar 2013 11:12, em um total de 2 vezes.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
mixsistemas@gmail.com
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Gravação duplicando

Mensagem por Pablo César »

Veja que você está num laço de repetição, provavelmente (mesmo que eventual), a resposta à condição de adicionar registro não foi obtido no tempo necessário pelo loop empregado. Eu fosse você colocaria após do loop um comando para aguardar algum tempo. Pode fazê-lo com Inkey(3) ou HB_IDLESLEEP( 3 ). Pode diminuir esse tempo de espera, caso o considere demorado, mas por se tratar de adicionar apenas um registro, acho que vale a penas dimensionar para mais do que para menos.

Ahhh e por favor, você precisa utilizar as CODE tags para visualização de código fontes para as próxima, ok ? :)Pos
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
rbonotto
Usuário Nível 3
Usuário Nível 3
Mensagens: 253
Registrado em: 06 Mai 2005 18:52

Gravação duplicando

Mensagem por rbonotto »

Ola Pablo, desculpe a desatenção com o code....

Quanto ao INKEY(0) ele ja esta la; dentro da funçõa esp() é apresentada uma msg na tela " aguarde acesso aos arquivos..." e em seguida um inkey(2)

Sera que DBCOMMIT() ajudaria ?

Abraços,
mixsistemas@gmail.com
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Gravação duplicando

Mensagem por Pablo César »

Eu seguiria tentando aumentando com o Inkey(3) e o commit realmente força a descarregar o buffer que o hd não tenha descarregado, então o mais indicado é o commit. Lembro que passei uma vez por isso, só que o commit deixa mais lento.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
rbonotto
Usuário Nível 3
Usuário Nível 3
Mensagens: 253
Registrado em: 06 Mai 2005 18:52

Gravação duplicando

Mensagem por rbonotto »

Caramaba, aumentei o INKEY() para 5 e acrescentei o DBCOMMIT(), mas o problema persiste :P

Sera que o problema esta na função ADIREG() ?
mixsistemas@gmail.com
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Gravação duplicando

Mensagem por Jairo Maia »

Olá rbonoto,

Não sei se é seu caso, mas vou relatar uma experiência que já se repetiu algumas vezes: Verifique se a máquina não está trabalhando com superaquecimento do processador.

Sim, sabemos que quando a máquina super aquece o processador pára. No entanto, já tive a experiência de ver máquinas que determinado momento pegava sol, e na maioria da vezes algum cooler não estava funcionando. Não sei se você tem como identificar a estação que está duplicando registro, e se for todas, pode ser problema no servidor.

Até mesmo em dias quentes, se a máquina está dentro de algum gabinete existe a possibilidade de acontecer isso.

Estou relatando isso porque as poucas experiência que tenho em relação a essa questão, todas confirmaram problemas de aquecimento no processador.
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)
jamazevedo
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 29 Dez 2005 16:50
Localização: Manaus - AM

Gravação duplicando

Mensagem por jamazevedo »

Tenho uma rotina semelhante, INKEY(2), DBCOMMIT() antes do DBUNLOCK(), não tenho problemas de duplicação.
______________________________________________________
Usando: Linux Ubuntu 18.04, Harbour 3.2.0dev r1811161533
______________________________________________________
José Airton de Menezes Azevedo
Manaus - AM
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Gravação duplicando

Mensagem por marcos.gurupi »

Caro, eu jah tive esse problema inclusive mais de uma vez, vc pode verificar se o HD estah ok. Aqui sempre ocorreu este problema era o HD. Verifique acredito q seja esse o caminho.
Marcos Roberto
NetService Software
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Gravação duplicando

Mensagem por asimoes »

Tenta isso,

Após o commit fecha o dbf e abre novamente.

Dá uma olhada neste link:

http://superuser.com/questions/482678/c ... no-page-fi
►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)
rbonotto
Usuário Nível 3
Usuário Nível 3
Mensagens: 253
Registrado em: 06 Mai 2005 18:52

Gravação duplicando

Mensagem por rbonotto »

Pessoal, Obrigado pela atenção.

O servidor é zerado e uma senhora maquina ! placa asus, processador i5, 8gig memoria e quando levantamos se o problema poderia ser o pc ele foi trocado, mas o problema continuou....

O "interessante" é que ele duplica aleatoriamente uma venda a cada numero consideravel de vendas.

Outra informação é que são 17 PC´s em rede que em um espaço de 3 horas fazem umas mil vendas.

O windows2003 server seria uma opção ?

Vou tentar a solução sugerida pelo asimoes, depois dou um alô do resultado.

Abraços !
mixsistemas@gmail.com
Responder