Dificuldade para salvar registro de ClientDataSet
Olá Pessoal,
To enrolado há alguns dias nesse código fonte, vou tentar ser breve.
Estou utilizando Firebird 1.5 com os Seguintes componentes no meu datamodule:
1 - IBDatabase
1 - IB Transaction
1 - IB Table
1 - DatasetProvider
1 - Client Dataset
1 - datasource
Em um dos forms eu tenho meus campos os quais linkei com o datasource que está ligado ao Client Dataset, a minha enorme dificuldade esta em alterar os registros e não deixá-los apenas bufferizados.
Por exemplo no form principal executo uma query para encontrar o registro desejado. Ai coloquei um DBGrid e um botão Alterar, então seleciono o registro no grid e clico no botão alterar.
No botão alterar coloco a instrução de abrir o form mais
datamodule1.clientdataset1.edit;
O form é aberto corretamente com os registros que desejo alterar, após as alterações clico no botão Ok, o qual tem as instruções:
datamodule1.clientdataset1.post;
datamodule1.clientdataset1.applyupdates(-1);
O registro é salvo e aparece no grid atualizado, mas se saio e entro no programa novamente ele não está mais lá.
Que comando está faltando?
Desculpem o desespero, mas só falta isto para terminar meu programinha.
To enrolado há alguns dias nesse código fonte, vou tentar ser breve.
Estou utilizando Firebird 1.5 com os Seguintes componentes no meu datamodule:
1 - IBDatabase
1 - IB Transaction
1 - IB Table
1 - DatasetProvider
1 - Client Dataset
1 - datasource
Em um dos forms eu tenho meus campos os quais linkei com o datasource que está ligado ao Client Dataset, a minha enorme dificuldade esta em alterar os registros e não deixá-los apenas bufferizados.
Por exemplo no form principal executo uma query para encontrar o registro desejado. Ai coloquei um DBGrid e um botão Alterar, então seleciono o registro no grid e clico no botão alterar.
No botão alterar coloco a instrução de abrir o form mais
datamodule1.clientdataset1.edit;
O form é aberto corretamente com os registros que desejo alterar, após as alterações clico no botão Ok, o qual tem as instruções:
datamodule1.clientdataset1.post;
datamodule1.clientdataset1.applyupdates(-1);
O registro é salvo e aparece no grid atualizado, mas se saio e entro no programa novamente ele não está mais lá.
Que comando está faltando?
Desculpem o desespero, mas só falta isto para terminar meu programinha.
Reifas
Curtidas 0
Respostas
Gandalf.nho
04/11/2004
As alterações estão sendo comitadas no banco?
GOSTEI 0
Maicongabriel
04/11/2004
Não utilize ´ApplyUpdates(-1)´, pois assim você ignora os erros que possam vir a ocorrer durante o ´Commit´ dos dados e consequentemente um Rollback é efetuado!
Ao invés de -1, utilize 0,1,2,... ou o numero que desejar, que deve ser igual ao numero de erros que você deseja que sejam exibidos, até efetuar o ´RollBack´.
Para verificar os Erros, no seu ClientDataSet (se você possui D7 e superior), faça o seguinte:
Declare na uses a unit: [b:893c9b5952]RecError[/b:893c9b5952]
No evento OnReconcileError, adicione:
Esta é apenas uma das possibilidades! Outras possibilidades podem estar diretamente ligadas ao ´Interbase Express´, com o qual eu particularmente não trabalho e desconheço.
Ao invés de -1, utilize 0,1,2,... ou o numero que desejar, que deve ser igual ao numero de erros que você deseja que sejam exibidos, até efetuar o ´RollBack´.
Para verificar os Erros, no seu ClientDataSet (se você possui D7 e superior), faça o seguinte:
Declare na uses a unit: [b:893c9b5952]RecError[/b:893c9b5952]
No evento OnReconcileError, adicione:
Action := HandleReconcileError(DataSet, UpdateKind, E);
Esta é apenas uma das possibilidades! Outras possibilidades podem estar diretamente ligadas ao ´Interbase Express´, com o qual eu particularmente não trabalho e desconheço.
GOSTEI 0