Fórum Alterar registro em tabela detalhe #573248
26/12/2016
0
e o banco é FireBird
Antonio Santos
Curtir tópico
+ 0Posts
27/12/2016
Jones Granatyr
Gostei + 0
27/12/2016
Antonio Santos
tudo funcionando direitinho, mas se eu precisar altera um item na tabela detalhe, quando vou gravar dá esse erro
"unable to find record. no key specified"
se eu colocar os campos como pfinkey = true ele gravar, mas se eu for inserir un novo registro da erro.
como faço pra corrigir issto, estou usando os componentes ZEOS.
ah outra coisa sou novato e não sei como construir essa query
Gostei + 0
27/12/2016
Antonio Santos
var
frCadOrcamento: TfrCadOrcamento;
mensagem: String;
implementation
uses UdnSever;
{$R *.dfm}
procedure TfrCadOrcamento.FormCreate(Sender: TObject);
begin
cdsOrcamento.Open;
cdsOrcamentoItens.Open;
cdsOrcamentoItens.MasterSource := dsOrcamento;
end;
procedure TfrCadOrcamento.btnGravarClick(Sender: TObject);
var
novo: boolean;
begin
btnInserir.Enabled:= True;
BtnEditar.Enabled:= True;
btnGravar.Enabled:= False;
BtnCancelar.Enabled:= False;
btnDeletar.Enabled:= True;
BtnFechar1.Enabled:= True;
//dmClient.RequiredFieldsValidate(DataSource1.DataSet);
//verifica se o registro é novo
novo:= (dsOrcamento.State = dsInsert);
dsOrcamento.DataSet.Post;
{verifica se o DataSource1 está ligado a um ClientDataSet}
if dsOrcamento.DataSet is TClientDataSet then
begin
mensagem:= 'O registro foi incluído ou alterado com sucesso. ';
Application.MessageBox(PChar(mensagem), 'Mensagem',MB_OK+MB_IconInformation);
PanelFicha.Enabled:= False;
{acessa a função ApplyUpdates do ClientDataSet para aplicar
as alterações no banco de dados, passando zero como parâmetro,
para indicar que, se existir mais de uma atualização para
ser efetivada no banco de dados, se alguma der erro,]
não confirma nenhuma. }
{ApplyUpdates é uma função, ela retorna o número
de erros ocorridos nas operações de atualização.
Se ela retornar zero é porque não houve nenhum erro
e o(s) registros(s) foi(foram) atualizado(s) com sucesso.}
if (TClientDataSet(dsOrcamento.DataSet).ApplyUpdates(0) = 0)
and novo then
begin
dsOrcamento.DataSet.Refresh;
if dsOrcamento.DataSet.RecordCount > 1 then
{manda a tabela para o último registro, caso
o registro seja um registro novo e a tabela possuir mais
de um registro. Isto é necessário pois o
Refresh faz com que a tabela volte para o primeiro
registro. Se o registro é novo, como a tabela
está ordenada pela chave primária, por padrão,
então, o registro que acabou de ser inserido
será o último.}
dsOrcamento.DataSet.Last;
end;
end;
end;
procedure TfrCadOrcamento.btnInserirClick(Sender: TObject);
begin
PanelFicha.Enabled:= True;
PanelFicha.Enabled:= True;
dsOrcamento.DataSet.Insert;
btnInserir.Enabled:= False;
BtnEditar.Enabled:= False;
btnGravar.Enabled:= True;
BtnCancelar.Enabled:= True;
btnDeletar.Enabled:= False;
BtnFechar1.Enabled:= False;
TClientDataSet(dsOrcamento.DataSet).FieldByName('DATA_INC').AsDateTime:= date;
TClientDataSet(dsOrcamento.DataSet).FieldByName('DATA_HAB').AsDateTime:= date;
TClientDataSet(dsOrcamento.DataSet).FieldByName('STATUS').AsString:= 'N';
TClientDataSet(dsOrcamento.DataSet).FieldByName('MARCA').AsString:= 'N';
end;
procedure TfrCadOrcamento.cdsOrcamentoItensAfterPost(DataSet: TDataSet);
begin
cdsOrcamentoItens.MasterSource := nil;
cdsOrcamentoItens.ApplyUpdates(0);
cdsOrcamentoItens.MasterSource := dsOrcamento;
end;
procedure TfrCadOrcamento.btnEditarClick(Sender: TObject);
begin
PanelFicha.Enabled:= True;
dsOrcamento.DataSet.Edit;
btnInserir.Enabled:= False;
BtnEditar.Enabled:= False;
btnGravar.Enabled:= True;
BtnCancelar.Enabled:= True;
btnDeletar.Enabled:= False;
BtnFechar1.Enabled:= False;
TClientDataSet(dsOrcamento.DataSet).FieldByName('DATA_ALT').AsDateTime:= date;
end;
procedure TfrCadOrcamento.btnCancelarClick(Sender: TObject);
begin
dsOrcamento.DataSet.Cancel;
if dsOrcamento.DataSet is TClientDataSet then
{cancelas as atualizações que não foram aplicadas ainda,
removendo elas da propriedade Delta do ClientDataSet
(que armazena as atualizações a serem efetivadas) }
TClientDataSet(dsOrcamento.DataSet).CancelUpdates;
mensagem:= 'A inclusão ou alteração foi abortada. ';
Application.MessageBox(PChar(mensagem), 'Atenção',MB_OK+MB_IconError);
PanelFicha.Enabled:= False;
btnInserir.Enabled:= True;
BtnEditar.Enabled:= True;
btnGravar.Enabled:= False;
BtnCancelar.Enabled:= False;
btnDeletar.Enabled:= True;
BtnFechar1.Enabled:= True;
end;
procedure TfrCadOrcamento.btnDeletarClick(Sender: TObject);
begin
If Application.MessageBox(
'Tem certeza que deseja excluir o registro?',
'Confirmação', MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2) = mrYes then
begin
dsOrcamento.DataSet.Delete;
if dsOrcamento.DataSet is TClientDataSet then
TClientDataSet(dsOrcamento.DataSet).ApplyUpdates(0);
dsOrcamento.OnStateChange(dsOrcamento);
mensagem:= 'O registro foi excluído com sucesso. ';
Application.MessageBox(PChar(mensagem), 'Informação',MB_OK+MB_IconInformation);
end;
end;
procedure TfrCadOrcamento.btnFechar1Click(Sender: TObject);
begin
Close;
end;
end.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)