Página 1 de 1

Gravação duplicando

Enviado: 25 Mar 2013 10:49
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.

Gravação duplicando

Enviado: 25 Mar 2013 11:20
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

Gravação duplicando

Enviado: 25 Mar 2013 14:30
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,

Gravação duplicando

Enviado: 25 Mar 2013 19:23
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.

Gravação duplicando

Enviado: 01 Abr 2013 10:39
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() ?

Gravação duplicando

Enviado: 01 Abr 2013 11:09
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.

Gravação duplicando

Enviado: 01 Abr 2013 11:56
por jamazevedo
Tenho uma rotina semelhante, INKEY(2), DBCOMMIT() antes do DBUNLOCK(), não tenho problemas de duplicação.

Gravação duplicando

Enviado: 01 Abr 2013 12:01
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.

Gravação duplicando

Enviado: 01 Abr 2013 14:28
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

Gravação duplicando

Enviado: 02 Abr 2013 10:49
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 !