Salvando dados em ClientDataset...

19/03/2010

Colega,   Boa noite!!!     Olha só, trabalho com Bd Sql Server e uso componentes de acesso ADO, atualmente fiz umas modificações no meu Datamule, incluindo DataSetProvider e CLientDatasSet, o problema é que quando tô inserindo um novo registro, não consigo salva-lo, agora atualizando um registro que ja existe funciona blz...   Veja o evento abaixo, onde to errando?     procedure TfrmCadProdutoDetalhe.acSalvarExecute(Sender: TObject);
begin    dmAdo.cdsProduto.Post;
   dmAdo.cdsProduto.ApplyUpdates(0);
 
if dmAdo.cdsProduto.ApplyUpdates(0) <> 0 then
   Showmessage('Não foi possível gravar as informações');       dmAdo.cdsProduto.Close;
   dmAdo.cdsProduto.Open;       ModalResult := mrOk; end;
  aguardo retorno        
Irenildo Carvalho

Irenildo Carvalho

Curtidas 0

Respostas

Rodrigo Mourão

Rodrigo Mourão

19/03/2010

Olá Irenildo,

Em primeiro lugar quando trabalhamos com ClientDataSet não precisamos do Post, somente do applyupdates. Isso nada tem haver com seu problema apenas para constar.

Agora o ClientDataSet gera o que eu chamo de erro silencioso. Como ele foi feito para trabalhar em aplicacao multi camadas entao os erros nao saltam na app. Faça o seguinte. Selecione este CDS e va no evento OnReconcilerError e coloque o seguinte:

ShowMessage(E.Message);

Isso vai mostrar na tela o mensagem do erro. Eu acredito que deve ser campo requerido mas faça o teste e coloque aqui a mensagem.

No aguardo.

Att,

GOSTEI 0
Irenildo Carvalho

Irenildo Carvalho

19/03/2010

Rodrigo,     Bom dia!!!     Veja, vc tem razão, o erro informa o não preenchimento do campo Grp_codigo, foreingKey da tabela Grupo de produtos, acredito que configurei os providersFlags de forma equivocda... Poderia me esclarecer melhor como configura-los?     agradecido     Irenildo
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

19/03/2010

Bem o principio basico e o seguinte.

Quando o campo e auto incremento no banco de dados temos que informar que ele nao e requerido pois senao o delphi nao grava pois vc nao vai informar este campo, ele sera gerado pelo banco. Mas ele so vai ser gerado quando vc gravar entao ficamos numa sinuca de bico. Se grava se eu informar e so gera se eu gavar entao todo campo auto incremento no banco de dados temos que informar que ele nao e requerido.

Agora devemos fazer isso so no ClientDataSet ou no SqlDataSet tambem. Se vc adicionou o field no SqlDataSet entao tera que configurar la tb. Eu sempre adiciono no SqlDataSet, configuro e depois adicione no CDS.

Att,

GOSTEI 0
Irenildo Carvalho

Irenildo Carvalho

19/03/2010

Mas em relação aos ProviderFlags, não tem alguma outra regra? Desculpa a ignorância é porque não usava clientDataset e DatasetProvider...     aguardo   muito obrigado
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

19/03/2010

Ah, sim desculpe.

Bem existem sim alguma regras, o DataSerProvider serve para poder gerar as instruções sql automaticamente. Você apenas da um apply update no CDS e o Provider sera Insert, Delete, Update ou quando da um open gera um select.

Coom isso e feito de forma automatica vc pode atraves dos flags dizer qula campo entra no where ou vai ser atualizado atras do pfUpdate ou pfWhere, ou qual campo e chava pfKey ou qual e requerido, pfRequired.

Basicamente seria isso.

Att,

GOSTEI 0
Irenildo Carvalho

Irenildo Carvalho

19/03/2010

  Valeu mano... Muito obrigado...   Um abraço   Irenildo    
GOSTEI 0
POSTAR