[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