Falha no Append...

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

Moderador: Moderadores

Avatar do usuário
ademilson
Usuário Nível 2
Usuário Nível 2
Mensagens: 87
Registrado em: 07 Ago 2007 10:01
Localização: Maringá
Contato:

Falha no Append...

Mensagem 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.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem 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()
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem por ederxc »

Alguem ja cehgou a usar o Set hardcommit em rede ??
C:\Xharbour\Xdev\Fw\VSX
Avatar do usuário
ademilson
Usuário Nível 2
Usuário Nível 2
Mensagens: 87
Registrado em: 07 Ago 2007 10:01
Localização: Maringá
Contato:

Mensagem 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.
_____________________
José Ademilson da Cruz
Gerente de Desenvolvimento Harbour
SG Sistemas de Automação ltda.
Avatar do usuário
ademilson
Usuário Nível 2
Usuário Nível 2
Mensagens: 87
Registrado em: 07 Ago 2007 10:01
Localização: Maringá
Contato:

Mensagem 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.
_____________________
José Ademilson da Cruz
Gerente de Desenvolvimento Harbour
SG Sistemas de Automação ltda.
ederxc
Usuário Nível 4
Usuário Nível 4
Mensagens: 619
Registrado em: 15 Set 2006 08:40
Localização: Pedreira -SP-

Mensagem 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 .......
:|<
C:\Xharbour\Xdev\Fw\VSX
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Mensagem 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.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Responder