Se eu entendi bem, na primeira alteração funciona e nas subsequentes não, correto? Já tentou dar um refresh no clientdataset?
Alexandre Renato Lorandi escreveu: > > Olá pessoal bom dia! > > Galera uso delphi 7 com os componentes da paleta dbx... ClientDataSet > + SqlQuery + DatasetProvider e DataSource.... o que acontece é o > seguinte. eu tenho uma tela de cadastro de clientes, por ex: Nome, > telefone, rua etc.... > > eu tenho uma tabela de pessoas, onde nesta tabela possuo uma chave > estrangeira para a tabela de endereços....... Então na minha tela eu > uso tudo dbedit, ou seja quando estou navegando entre os pacientes se > eu editar um campo por ex o campo nome a tabela pessoa entra em modo > de edição, ai quando dou um post ele grava blz.... > > o que esta acontencendo é o seguinte... o form de cadastro de > pacientes é uma herança de um form pai que criei, então no form pai no > botão gravar eu tenho esse codigo, que é igual a todos os outros ... > > procedure TFrmCadastrosPai.SpeedButton2Click(Sender: TObject); > begin > > //CDEndereco = ClientDataSet para a tabela endereço........ > > IF(CDEndereco.State in [dsEdit, dsInsert]) Then > begin > try > CDEndereco.Post; > CDEndereco.ApplyUpdates(0); > except > on e: EDatabaseError do > begin > ShowMessage('Erro:'+ E.Message); > abort; > end; > on e:Exception do > begin > ShowMessage('Erro:'+ E.Message); > abort; > end; > end; > end; > > no form de clientes que é uma herança desse form ai de cima o código é > especifico no botão gravar fica assim.. > > procedure TFrmCadastrosPaciente.SpeedButton2Click(Sender: TObject); > var > codigo:Integer; > begin > inherited; > > IF(CDPessoas.State in [dsEdit, dsInsert]) Then > begin > //ADICIONA VALORES ESPECIFICOS PARA O PACIENTE. > CDPessoas.FieldByName('TIPO_PESSOA').AsString:='P'; > CDPessoas.FieldByName('ATIVO').AsString:='1'; > CDPessoas.FieldByName('TIPO_PESSOA_FJ').AsString:='F'; > try > CDPessoas.Post; > CDPessoas.ApplyUpdates(0); > except > on e:Exception do > begin > showMessage('Erro:'+ e.Message); > CDPessoas.Cancel; > abort; > exit; > end; > end; > end; > If MessageDlg('Deseja Inserir Novo > Registro?',mtConfirmation,[mbyes,mbNo],0) = mryes Then > begin > EditConvenio.Text:=''; > edtBairro.Text:=''; > edtCidade.Text:=''; > CDPessoas.Refresh; > CDPessoas.Last; > codigo:=CDPessoas.FIELDBYNAME('PESSOA_ID').AsInteger; > CDPessoas.Insert; > edtcodigo.Text:=intToStr(codigo + 1); > end; > end; > > Bom vamos ao problema o que acontece é o seguinte estou na tela de > cadastro estou vendo o cliente Renato, bom vou la e edito o telefone > do renato e dou um gravar blz ele altera sem problemas, agora estou na > mesma tela e altero a rua do renato e dou um gravar ele não da erro > mas não muda.... ai executei a partir do delphi mesmo e quando ele > chega no CDEndereco.ApplyUpdates(0); ele da erro dizendo que não > encontrou registo que a chave não esta especificada, ve se pode um > negocio desses, e no select que faço estou puxando todos os campos > dessa tabela endereço.... veja bem é só quando vou editar o endereço > na tela de cadastro que não altera nada, que é o primeiro codigo la em > cima... > > bom fico no aguardo de vc's não consegui achar o problema ate agora > > valeu..... > > __________________________________________________ > Fale com seus amigos de graça com o novo Yahoo! Messenger > http://br.messenger.yahoo.com/ <http://br.messenger.yahoo.com/> > > [As partes desta mensagem que não continham texto foram removidas] > >