Página 1 de 1

Falha no Append...

Enviado: 13 Set 2007 15:53
por ademilson
Senhores...

Estou com o seguinte problema, tenho um sistemas que roda em rede em mais ou menos 40 maquinas, em harbour linux dbf, e esta acontecendo alguns casos esporaticos de nao gravar os dados em uma determinada tabela.

exemplo: E na entrada de notas, primeiramente gravo os dados da nota, depois gravo o financeiro, soh por ultimo que gravo a mov. de produtos e eh justamente nesta tabela que nao estao gravando os dados. Problemão neh.... Já coloquei varios testes, gravando logs. e eh uma coisa meio do outro mundo..rs

Toda sugestao sera bem vinda... Obrigado.

ABRACOS!!!

Jose Ademilson da Cruz
SG Sistemas de Automacao ltda.

Enviado: 13 Set 2007 16:25
por sygecom
Faça o teste no DbAppend()
Ex:

Código: Selecionar todos

sele agenda
DbAppend() 
IF NetErr()
    msginfo("Opa, deu erro ao criar o 
ELSE
repl nome with Vnome
dbcommit()

Enviado: 13 Set 2007 18:40
por gvc
- Teste o Append no arquivo;
- use a seqüência dbcommit(), dbunlock() para gravar e liberar o registro no disco.

O dbcommit() força a gravação dos dados da memória para o disco. Se vc liberar o bloqueio de registro antes de gravar, outro usuário pode sobrepor os dados indevidamente.

Boa sorte.

Enviado: 14 Set 2007 07:23
por ederxc
Alguem ja cehgou a usar o Set hardcommit em rede ??

Enviado: 14 Set 2007 09:01
por ademilson
Ola amigos...

Pois estao, estas verificacoes eu ja estou fazendo no meu sistema, mas, esse comando que o Ederxc comentou eu nunca usei, será que alguem ja usou????
Vou dar uma pesquisada sobre isso.......

T+
Abracos

Jose Ademilson da Cruz
SG Sistemas de Automacao ltda.

Enviado: 14 Set 2007 09:10
por ademilson
Bom.... dei uma olhada aki nos fontes do harbour e esta indicando que se setado ele forca a gravacao imediata no disco... senao ele fica gravado em cache para posterior gravacao.... vou testa-lo.....

obrigado.... valeu pela dica Ederxc

Abracos

Jose Ademilson da Cruz
SG Sistemas de Automacao ltda.

Enviado: 14 Set 2007 10:58
por ederxc
Então , ele funciona legau quase igual ao DBCOMMit()


Digo quase pq , vamos aos exemplos...

Código: Selecionar todos

repla eder    with veder
repla ederxc with vederxc

dbcommit()
\\nesse caso o buffer é gravado no disco rigido depois de todos os replaces




Código: Selecionar todos

Set hardcommit  // nesse caso da a impressão de que ele fica gravando no disco a cada REPLA e não no final 

repla eder    with veder   //grava na hora
repla ederxc with vederxc // grava na hora 


Resumão ....

01 -Ou seja creio que o Set hardcommit deichara a gravação um pouco mais lenta , talvez , seja "N" segundos caso imperseptivel , mas é uma teoria

02 - Mas se vai gravar no disco rigido tudo mesmo , qual a diferença de gravar tudo de uma vez ou ir gravando a cada repla

03- Bom agora é contar com o MALIGNO ou com o CHUK NORIS


teoris and teorias .......
:|<

Enviado: 15 Set 2007 15:37
por alaminojunior
O commit descarrega o conteudo do buffer para o disco, que contém sempre ( em caso de modo compartilhado ) o ultimo registro, e não o ultimo campo do registro. Sendo assim, considere o que citou um dos colegas mais acima. Teste para saber se o Dbappend() não falhou. Se falhou implemente algo para que tente até conseguir, ou tentar por n vezes. Lembrando, o uso exagerado dos commit´s da vida, atrasam em muito o sistema.