[firebase-br] Perca de registros

Jeter Rabelo Ferreira jeter.rabelo em gmail.com
Qua Jan 26 12:02:29 -03 2011


O Providerflag serve  para informar quais campos serão incluindos serão
incluídos na cláusula where, pk e etc, isso não interfere no Insert/Update a
ponto de que os regsitros não serem gravados..

O DataSetProvider  "empacota" os dados para enviá-los ao BD para gravação,
colocando  os campos que foram modificados e formatando a cláusula insert /
update do SQL correspondente de forma transparente.

A forma que você está fazendo é correta, mas no sentido de efetuar a
gravação num DataSet.

Deve-se ter em mente duas coisas: Gravação num DataSet e commit no Banco de
Dados são duas coisas bem diferentes.

Nem todo Applyupdates necessariamente será incluído no Banco de Dados. Quer
um exemplo?

-> Inicie um processo de gravação, mas dê um starttransaction manualmente,
não deixe o DBX fazer isso automaticamente;
-> De o Post e o ApplyUpdates no DataSet;
-> Efetue um rollback na sua transação
-> Verifique: Os dados não foram gravados no Banco de Dados, embora foi
efetuado um Post e ApplyUpdates.

Esse processo de StartTransaction / Commit / Rollback já foi discutido N
vezes nessa lista.

Sou assinante dessa lista há mais de 7 anos, e já vi centenas de dúvidas as
respeito.

Eu mesmo, no início tive muitas dúvidas, pois como eu vim do mundo Clipper
e, quando comecei a programa em Delphi (1996),, trouxe a mesma bagagem do
Clipper  e demorei alguns anos para mudar a filosofia.

Hoje eu faço da seguinte forma:
-> Trabalho "totalmente desconectado" do Banco de Dados, ou seja, eu
mantenho um conexão com o banco, mas inativa.
-> Os dados são preenchidos em DataSet`s locais, sem a devida conexão com
Banco de Dados;
-> Como trabalho totalmente OOP, minhas classes tratam das transações em
casos de consultas;
-> Após o usuário preencher os dados, eu mando essas informações para a
minha classe que trata de enviar as mesmas para o BD
-> Quando tenho alterações em várias tabelas, dou um StartTransaction antes
de começar as gravações e começo o processo, caso de algum erro, um RollBack
resolve tudo e os dados permanecem no meu DataSet local para correção de
alguma informação incorreta;
-> Se der certo, commit e pronto;

Para você ter uma idéia, migrei um sistema de um grande provedor  de minha
região há quase 3 meses. Segue abaixo algumas especificações desse sistema:
-> São mais de 40 usuários simultâneos
-> BD > 14,5 GB
-> FB 2.5
-> Server Windows 2003
Nunca houve uma perda de registros, mesmo com a quantidade enorme de
registros que são incluídos diariamente. O BD "cresce" a "quantidade
modesta" de quase 1 GB/mês.

Bom, depois desse "testamento", espero ter podido ajudar de alguma forma.

Caso ficar alguma dúvida, envie aí. Se eu não puder ajudar, com certeza
alguém com mais experiência vai ajudá-lo.

Atenciosamente.

Em 25 de janeiro de 2011 21:48, Robson Catunda
<robson.catunda em gmail.com>escreveu:

> Eu utilizo delphi+dbexpress+firebird 2.0 (antes era o 1.5).
> ApplyUpdates nos eventos afterpost e afterdelete do clientdataset e já
> commita no bd. (já verifiquei isso várias vezes).
> O problema pode estar no providerflags dos campos ou no próprio
> datasetprovider.
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



-- 
[]'s
Jéter Rabelo Ferreira



Mais detalhes sobre a lista de discussão lista