[delphi-br] Problemas com update
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/ [As partes desta mensagem que não continham texto foram removidas]
Re: [delphi-br] Problemas com update
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]
Res: [delphi-br] Problemas com update
não, não é isso amigo, a mudança nos dados do endereço que é da tabela endereço não funciona nem na primeira vez que se tenta não... - Mensagem original De: Alexandre Pedroto [EMAIL PROTECTED] Para: delphi-br@yahoogrupos.com.br Enviadas: Terça-feira, 23 de Janeiro de 2007 13:39:23 Assunto: Re: [delphi-br] Problemas com update 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. SpeedButton2Clic k(Sender: TObject); begin //CDEndereco = ClientDataSet para a tabela endereço. ... IF(CDEndereco. State in [dsEdit, dsInsert]) Then begin try CDEndereco.Post; CDEndereco.ApplyUpd ates(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 TFrmCadastrosPacien te.SpeedButton2C lick(Sender: TObject); var codigo:Integer; begin inherited; IF(CDPessoas. State in [dsEdit, dsInsert]) Then begin //ADICIONA VALORES ESPECIFICOS PARA O PACIENTE. CDPessoas.FieldByNa me('TIPO_ PESSOA'). AsString: ='P'; CDPessoas.FieldByNa me('ATIVO' ).AsString: ='1'; CDPessoas.FieldByNa me('TIPO_ PESSOA_FJ' ).AsString: ='F'; try CDPessoas.Post; CDPessoas.ApplyUpda tes(0); except on e:Exception do begin showMessage( 'Erro:'+ e.Message); CDPessoas.Cancel; abort; exit; end; end; end; If MessageDlg(' Deseja Inserir Novo Registro?',mtConfir mation,[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.ApplyUpd ates(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] __ Fale com seus amigos de graça com o novo Yahoo! Messenger http://br.messenger.yahoo.com/ [As partes desta mensagem que não continham texto foram removidas]