Problema de Append
Moderador: Moderadores
- juniorcamilo
- Usuário Nível 3

- Mensagens: 343
- Registrado em: 10 Nov 2006 09:12
- Localização: Pará
Problema de Append
Amigos muito isoladamente falando, ou seja, dificilmente acontece, mas acontece em 2 clientes meus. apos feita a venda para um cliente vou gerar o financeiro para o mesmo, quando imprime a nota para o cliente assinar sai realmente a duplicata impressa abaixo do total da nota tento ai a confirmação que realmente foi gravada no arquivo financeiro a duplicata. Só que no final do dia quando fecha o caixa bomba cade a duplicata do cliente, some sem deixar vestigio ja fiz testes e mais teste e nada, ja ate tirei o pack na hora da reorganizacao deste arquivo e nao a vestigio do determinado registro, ai eu tirei uma logica q acho que em um determinada hora por sei la oq. outro registro sobreescreve o antigo, ou seja, ancho que o append nao esta montando um registro novo e sim travando o ultimo registro armazenado e sobreescrevendo com uma nova informação, oq fazer?
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Olá,ancho que o append nao esta montando um registro novo e sim travando o ultimo registro armazenado e sobreescrevendo com uma nova informação, oq fazer?
Acredito que se vc esta usando append blank em momento algum ele vai alterar um Registro que já existe, claro que vale lembrar que se vc tem esse sistema em Multi-usuario tens que fazer os devidos tratamento para rede. Agora ainda vc pode ter um usuario usando um DBU da vida e deletando um registro, ou seria ideal vc postar o codigo dessa sua rotina que esta dando o problema para nos poder dar uma analisada e quem sabe dar algumas dicas em cima do que vc já tem.
Abraços
Leonardo Machado
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
Ao terminar a inclusão você executa um COMMIT?outro registro sobreescreve o antigo, ou seja, ancho que o append nao esta montando um registro novo e sim travando o ultimo registro armazenado e sobreescrevendo com uma nova informação, oq fazer?
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
E também precisa verificar se o append blank teve exito. Precisa verificar como vc está incluindo um novo registro. Se além do append blank, vc emite um rlock() (desnecessário), e não existe uma verificação do exito do append, com certeza o furo está por aí.
E é lógico, como citou o Maligno, commit sempre antes de destravar. Aliás seria mais providencial, um DbCommit().
E é lógico, como citou o Maligno, commit sempre antes de destravar. Aliás seria mais providencial, um DbCommit().
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
Falar em COMMIT (traduzido para dbCommitAll()) é força de hábito pra mim. Queria dizer dbCommit(), que é melhor mesmo. 
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Vc coloca o número sequencial de lançamento? Algum controle desse tipo?
Veja sua rotina de inclusão.
Se ela depende de determinado número e esse é gerado pelo velho "pega o último número do arquivo e soma 1", ai pode estar seu problema.
Outra é liberar o registro atualiado antes do commit dos dados.
Veja sua rotina de inclusão.
Se ela depende de determinado número e esse é gerado pelo velho "pega o último número do arquivo e soma 1", ai pode estar seu problema.
Outra é liberar o registro atualiado antes do commit dos dados.
"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}
{POG - Programação Orientada a Gambiarra}
- juniorcamilo
- Usuário Nível 3

- Mensagens: 343
- Registrado em: 10 Nov 2006 09:12
- Localização: Pará
sygecom escreveu:Olá,ancho que o append nao esta montando um registro novo e sim travando o ultimo registro armazenado e sobreescrevendo com uma nova informação, oq fazer?
Acredito que se vc esta usando append blank em momento algum ele vai alterar um Registro que já existe, claro que vale lembrar que se vc tem esse sistema em Multi-usuario tens que fazer os devidos tratamento para rede. Agora ainda vc pode ter um usuario usando um DBU da vida e deletando um registro, ou seria ideal vc postar o codigo dessa sua rotina que esta dando o problema para nos poder dar uma analisada e quem sabe dar algumas dicas em cima do que vc já tem.
Abraços
Leonardo Machado
PREN->(dbappend())
DO WHILE Travar5("PREN"); inkey(.2); ENDDO
PREN->CODCLI := cCodcli
PREN->NRODOC := cCodped+"/"+iii
PREN->NRONOT := cCodped
PREN->DTAEMI := date()
PREN->DTAENT := date()
PREN->CODBAN := "001"
PREN->TIPDOC := cTipdoc
PREN->REFERE := cRefere
PREN->CODVEN := cCodven
PREN->COBRAD := cCodven
PREN->CAIXA := cCaixa
PREN->NROCAX := Pegacaixa()
PREN->SETOR := cSetor
PREN->ENTRACAX:= "S"
PREN->CARGA := cCarga
PREN->CHAVE := cCodped+"/1"+cCaixa
if cPrazo # "00"
PREN->DTAVEN := date()+val(PZO->VENPZO&ii)
PREN->DTAVOR := date()+val(PZO->VENPZO&ii)
else
PREN->DTAVEN := dDtabase
PREN->DTAVOR := dDtabase
endif
if (q = 1) .or. (nQq = 2 .and. q = 2)
if PZO->CENTAVOS == q
PREN->VALENT := nValDupl+nCentavos
PREN->VALORI := nValDupl+nCentavos
else
PREN->VALENT := nValDupl+nDif
PREN->VALORI := nValDupl+nDif
endif
else
if PZO->CENTAVOS == q
PREN->VALENT := nValDupl+nCentavos
PREN->VALORI := nValDupl+nCentavos
else
PREN->VALENT := nValDupl
PREN->VALORI := nValDupl
endif
endif
if !empty(cObs)
PREN->HISTORICO += "OBS.:"+cObs+chr(13)
endif
PREN->(dbunlock())
PREN->(dbcommit())
olha esta ai a funcao que tanto me deixa louco, olha esta funcao tem nada nda uns 8 anos que eu fiz e so agora é que esta dando este problema e é um caso isolado....
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
AHA
Exatamente o que eu citei.
Aquele dbappend() precisa ser testado.
Aliás um outro equívoco: O dbappend() (se não falhar) já trava o registro, não precisa travar depois com rlock().
Da maneira como está, se o dbappend() não conseguir exito, o sistema não vai retornar erro, pois existe um rlock() em seguida.
tente assim
Exatamente o que eu citei.
Código: Selecionar todos
PREN->(dbappend())
DO WHILE Travar5("PREN"); inkey(.2); ENDDO Aliás um outro equívoco: O dbappend() (se não falhar) já trava o registro, não precisa travar depois com rlock().
Da maneira como está, se o dbappend() não conseguir exito, o sistema não vai retornar erro, pois existe um rlock() em seguida.
tente assim
Código: Selecionar todos
do while .t.
dbappend()
if neterr()
loop
else
exit
endif
enddo
replaces...Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Será que botaram trago no meu chimarrão ? ...não toh vendo RLOCK() nenhum....
Realmente, o que o colega alaminojunior disse faz sentido, vc deve testar dbappend()
Eu uso uma função para isso:
Outra coisa é o final, eu uso ao contrario ou seja primeiro dou o dbcommit() e depois libero o registro()
Realmente, o que o colega alaminojunior disse faz sentido, vc deve testar dbappend()
Eu uso uma função para isso:
Código: Selecionar todos
******************
Function AppRede()
******************
PRIVATE oDlgHabla:=NIL
While .T.
DbAppend()
If !NetErr()
Fim_Run()
Return(.T.)
Else
MsgRun("Aguarde Inserindo Novo Registro...")
Inkey(1)
Fim_Run()
Loop
EndIf
Enddo
Fim_Run()
Return(Nil)
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Meu amigo gauchinho, o que se supõe com isso ?não toh vendo RLOCK() nenhum....
Código: Selecionar todos
DO WHILE Travar5("PREN")Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Travar o arquivo todo é função do FLock(). O RLock() trava apenas o registro apontado.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
