Relação de tabelas na exclusao de itens
Gostaria de saber como fazer para relacionar minhas tabelas (interbase 2009), gostaria que na hora dele excluir
ele fizesse uma pesquisa para ver se ele esta linkado em algum lugar e dar um aviso. Tipo no cadastro de produto eu uso a tabela fornecedores, caso excluisse algum fornecedor e ele estivesse linkado com a tabela produto ele mostrasse a mensagem de dado relacionado com outra tabela. O codigo usado no botao exclusao é este:
if not DataModule_dados.TblProdutos.isEmpty then begin if messageDlg ('Confirma exclusão do registro?', mtConfirmation, mbOkCancel,0) = mrOk then DataModule_dados.TblProdutos.Delete; EditPesquisa.Clear; EditPesquisa.SetFocus; end else showmessage('não ha registros'); end;
Daniel
Curtidas 0
Respostas
Eriley Barbosa
02/08/2010
No Before Delete da tabela de fornecedores, coloque o seguinte código:
Atenciosamente
Eriley
if not DataModule_dados.TblProdutos.Active then DataModule_dados.TblProdutos.Open; if DataModule_dados.TblProdutos.Locate('CampoCodFornecedor', DataModule_dados.TblFornecedores.FieldByName('CampoCodFornecedor'). Value, []) then begin MessageDlg ('Este fornecedor não pode ser excluído, poi, possuí produtos associados a ele', mtInformation, mbOk,0) ; Abort; end;
GOSTEI 0
Eriley Barbosa
02/08/2010
Ficou meio desformatado:
if not DataModule_dados.TblProdutos.Active then
DataModule_dados.TblProdutos.Open;
if DataModule_dados.TblProdutos.Locate('CampoCodFornecedor', DataModule_dados.TblFornecedores.FieldByName('CampoCodFornecedor'). Value, []) then
begin
MessageDlg ('Este fornecedor não pode ser excluído, poi, possuí produtos associados a ele', mtInformation, mbOk,0) ;
Abort;
end; Atenciosamente Eriley
begin
MessageDlg ('Este fornecedor não pode ser excluído, poi, possuí produtos associados a ele', mtInformation, mbOk,0) ;
Abort;
end; Atenciosamente Eriley
GOSTEI 0
Daniel
02/08/2010
Ficou meio desformatado:
if not DataModule_dados.TblProdutos.Active then
DataModule_dados.TblProdutos.Open;
if DataModule_dados.TblProdutos.Locate('CampoCodFornecedor', DataModule_dados.TblFornecedores.FieldByName('CampoCodFornecedor'). Value, []) then
begin
MessageDlg ('Este fornecedor não pode ser excluído, poi, possuí produtos associados a ele', mtInformation, mbOk,0) ;
Abort;
end; Atenciosamente Eriley
Eriley nao consegui juntar estes codigos com os meus (sou iniciante ainda), tem como vc me mostrar onde eu começo eles. (Before delete - nao entendi)
begin
MessageDlg ('Este fornecedor não pode ser excluído, poi, possuí produtos associados a ele', mtInformation, mbOk,0) ;
Abort;
end; Atenciosamente Eriley
GOSTEI 0
Eriley Barbosa
02/08/2010
Selecione no seu DataModule o componente Table TblFornecedores ou o nome que você deu para ele, após seleciona-lo, vá no object inspector, na aba events e deum duplo-clique ao lado do evento Before Delete e coloque o código que te dei adaptando para o nome dos seus componentes e nome de campo.
Atenciosamente
Eriley
GOSTEI 0
Daniel
02/08/2010
Selecione no seu DataModule o componente Table TblFornecedores ou o nome que você deu para ele, após seleciona-lo, vá no object inspector, na aba events e deum duplo-clique ao lado do evento Before Delete e coloque o código que te dei adaptando para o nome dos seus componentes e nome de campo.
Atenciosamente
Eriley
Consegui achar porem ao digitar messagedlg ela aparece sublinhada de vermelho e ao executar ele da os seguintes erros
E2003: Undeclared identifier: 'Messagedlg'
E2003: Undeclared identifier: 'mtinformation'
E2003: Undeclared identifier: 'mbOK'
E estou usando uma TSimpleDataSet ao inves da Table
Obrigado por enquanto
GOSTEI 0
Eriley Barbosa
02/08/2010
No uses do seu DataModule declare a Unit Dialogs, como abaixo:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs; Atenciosamente Eriley
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs; Atenciosamente Eriley
GOSTEI 0
Eriley Barbosa
02/08/2010
Também faltou os colchetes no mbok:
if not DataModule_dados.TblProdutos.Active then
DataModule_dados.TblProdutos.Open;
if DataModule_dados.TblProdutos.Locate('CampoCodFornecedor', DataModule_dados.TblFornecedores.FieldByName('CampoCodFornecedor'). Value, []) then
begin
MessageDlg ('Este fornecedor não pode ser excluído, poi, possuí produtos associados a ele', mtInformation, [mbOK], 0); Abort;
end; Atenciosamente Eriley
begin
MessageDlg ('Este fornecedor não pode ser excluído, poi, possuí produtos associados a ele', mtInformation, [mbOK], 0); Abort;
end; Atenciosamente Eriley
GOSTEI 0
Daniel
02/08/2010
Também faltou os colchetes no mbok:
if not DataModule_dados.TblProdutos.Active then
DataModule_dados.TblProdutos.Open;
if DataModule_dados.TblProdutos.Locate('CampoCodFornecedor', DataModule_dados.TblFornecedores.FieldByName('CampoCodFornecedor'). Value, []) then
begin
MessageDlg ('Este fornecedor não pode ser excluído, poi, possuí produtos associados a ele', mtInformation, [mbOK], 0); Abort;
end; Atenciosamente Eriley
begin
MessageDlg ('Este fornecedor não pode ser excluído, poi, possuí produtos associados a ele', mtInformation, [mbOK], 0); Abort;
end; Atenciosamente Eriley
GOSTEI 0
Daniel
02/08/2010
Também faltou os colchetes no mbok:
if not DataModule_dados.TblProdutos.Active then
DataModule_dados.TblProdutos.Open;
if DataModule_dados.TblProdutos.Locate('CampoCodFornecedor', DataModule_dados.TblFornecedores.FieldByName('CampoCodFornecedor'). Value, []) then
begin
MessageDlg ('Este fornecedor não pode ser excluído, poi, possuí produtos associados a ele', mtInformation, [mbOK], 0); Abort;
end; Atenciosamente Eriley
Eriley quando executo o programa ele continua excluindo os dados mesmo interligao com outras tabelas
begin
MessageDlg ('Este fornecedor não pode ser excluído, poi, possuí produtos associados a ele', mtInformation, [mbOK], 0); Abort;
end; Atenciosamente Eriley
GOSTEI 0
Eriley Barbosa
02/08/2010
Era para funcionar, mova o código abaixo para o onClick do botão excluir fornecedor:
if not DataModule_dados.TblProdutos.Active then
DataModule_dados.TblProdutos.Open;
if DataModule_dados.TblProdutos.Locate('CampoCodFornecedor', DataModule_dados.TblFornecedores.FieldByName('CampoCodFornecedor'). Value, []) then
begin
MessageDlg ('Este fornecedor não pode ser excluído, poi, possuí produtos associados a ele', mtInformation, [mbOK], 0); Abort;
end; Se não funcionar, poste o seu código do evento onclik do botão excluir fornecedor e a estrutura da tabela fornecedores e produtos. Atenciosamente Eriley
begin
MessageDlg ('Este fornecedor não pode ser excluído, poi, possuí produtos associados a ele', mtInformation, [mbOK], 0); Abort;
end; Se não funcionar, poste o seu código do evento onclik do botão excluir fornecedor e a estrutura da tabela fornecedores e produtos. Atenciosamente Eriley
GOSTEI 0
Daniel
02/08/2010
Era para funcionar, mova o código abaixo para o onClick do botão excluir fornecedor:
if not DataModule_dados.TblProdutos.Active then
DataModule_dados.TblProdutos.Open;
if DataModule_dados.TblProdutos.Locate('CampoCodFornecedor', DataModule_dados.TblFornecedores.FieldByName('CampoCodFornecedor'). Value, []) then
begin
MessageDlg ('Este fornecedor não pode ser excluído, poi, possuí produtos associados a ele', mtInformation, [mbOK], 0); Abort;
end; Se não funcionar, poste o seu código do evento onclik do botão excluir fornecedor e a estrutura da tabela fornecedores e produtos. Atenciosamente Eriley
Eriley eu mudei o campo de pesquisa (tinha colocado errado), mas mesmo assim ela da erro, agora ele avisa que o dado nao pode ser excluido mesmo se ele nao estiver interligado em outra tabela ele ainda da o aviso que nao pode ser excluido tanto no before delete como no onclick. O codigo do onclick é este:
begin
MessageDlg ('Este fornecedor não pode ser excluído, poi, possuí produtos associados a ele', mtInformation, [mbOK], 0); Abort;
end; Se não funcionar, poste o seu código do evento onclik do botão excluir fornecedor e a estrutura da tabela fornecedores e produtos. Atenciosamente Eriley
procedure TForm_Exclusao_Fornecedor.BotaoExcluirClick(Sender: TObject); begin if not DataModule_dados.Tblfornecedor.isEmpty then begin if messageDlg ('Confirma exclusão do registro?', mtConfirmation, mbOkCancel,0) = mrOk then DataModule_dados.TblFornecedor.Delete;//Confirmação da exclusão do registro EditPesquisa.Clear;//Apagar dados da edit de pesquisa EditPesquisa.SetFocus;//Selecionar edit de pesquisa end else ShowMessage('Não existem mais dados a serem excluídos!'); end;
CODIGOPRODUTO - LONG - NOT NULL FORNECEDOR - VARCHAR - NOT NULL PRODUTO - VARCHAR - NOT NULL UNIDADE - CHAR VALORUNITARIO - FLOAT OBSERVACAO - VARCHAR
GOSTEI 0
Eriley Barbosa
02/08/2010
Apague o código do Before Delete e salve seu projeto.
if not DataModule_dados.TblProdutos.Active then
DataModule_dados.TblProdutos.Open;
if DataModule_dados.TblProdutos.Locate('CampoCodFornecedor', DataModule_dados.TblFornecedores.FieldByName('CampoCodFornecedor'). Value, []) then
begin
MessageDlg ('Este fornecedor não pode ser excluído, poi, possuí produtos associados a ele', mtInformation, [mbOK], 0); Abort;
end; procedure TForm_Exclusao_Fornecedor.BotaoExcluirClick(Sender: TObject);
begin
if not DataModule_dados.Tblfornecedor.isEmpty then
begin
if messageDlg ('Confirma exclusão do registro?', mtConfirmation, mbOkCancel,0) = mrOk then begin if not DataModule_dados.TblProdutos.Active then DataModule_dados.TblProdutos.Open; if DataModule_dados.TblProdutos.Locate('FORNECEDOR', DataModule_dados.TblFornecedores.FieldByName('CODIGOFORNECEDOR'). AsString, []) then
begin
MessageDlg ('Este fornecedor não pode ser excluído, pois, possuí produtos associados a ele', mtInformation, [mbOK], 0); Abort; end else begin DataModule_dados.TblFornecedor.Delete;//Confirmação da exclusão do registro
EditPesquisa.Clear;//Apagar dados da edit de pesquisa
EditPesquisa.SetFocus;//Selecionar edit de pesquisa
end;
end else
ShowMessage('Não existem mais dados a serem excluídos!');
end; Para fazer a verificação com query, preciso saber se está utilizando dbexpress, IBX,Bde ou outro tipo de componente. Mas tente com este código. Atenciosamente Eriley
begin
MessageDlg ('Este fornecedor não pode ser excluído, poi, possuí produtos associados a ele', mtInformation, [mbOK], 0); Abort;
end; procedure TForm_Exclusao_Fornecedor.BotaoExcluirClick(Sender: TObject);
begin
if not DataModule_dados.Tblfornecedor.isEmpty then
begin
if messageDlg ('Confirma exclusão do registro?', mtConfirmation, mbOkCancel,0) = mrOk then begin if not DataModule_dados.TblProdutos.Active then DataModule_dados.TblProdutos.Open; if DataModule_dados.TblProdutos.Locate('FORNECEDOR', DataModule_dados.TblFornecedores.FieldByName('CODIGOFORNECEDOR'). AsString, []) then
begin
MessageDlg ('Este fornecedor não pode ser excluído, pois, possuí produtos associados a ele', mtInformation, [mbOK], 0); Abort; end else begin DataModule_dados.TblFornecedor.Delete;//Confirmação da exclusão do registro
EditPesquisa.Clear;//Apagar dados da edit de pesquisa
EditPesquisa.SetFocus;//Selecionar edit de pesquisa
end;
end else
ShowMessage('Não existem mais dados a serem excluídos!');
end; Para fazer a verificação com query, preciso saber se está utilizando dbexpress, IBX,Bde ou outro tipo de componente. Mas tente com este código. Atenciosamente Eriley
GOSTEI 0
Eriley Barbosa
02/08/2010
A identação ficou errada, o correto é:
procedure TForm_Exclusao_Fornecedor.BotaoExcluirClick(Sender: TObject);
begin
if not DataModule_dados.Tblfornecedor.isEmpty then
begin
if messageDlg ('Confirma exclusão do registro?', mtConfirmation, mbOkCancel,0) = mrOk then
begin
if not DataModule_dados.TblProdutos.Active then
DataModule_dados.TblProdutos.Open;
if DataModule_dados.TblProdutos.Locate('FORNECEDOR', DataModule_dados.TblFornecedores.FieldByName('CODIGOFORNECEDOR'). AsString, []) then
begin
MessageDlg ('Este fornecedor não pode ser excluído, pois, possuí produtos associados a ele', mtInformation, [mbOK], 0);
Abort;
end
else
begin
DataModule_dados.TblFornecedor.Delete;//Confirmação da exclusão do registro
EditPesquisa.Clear;//Apagar dados da edit de pesquisa
EditPesquisa.SetFocus;//Selecionar edit de pesquisa
end;
end;
end
else
ShowMessage('Não existem mais dados a serem excluídos!');
end;
begin
if not DataModule_dados.Tblfornecedor.isEmpty then
begin
if messageDlg ('Confirma exclusão do registro?', mtConfirmation, mbOkCancel,0) = mrOk then
begin
if not DataModule_dados.TblProdutos.Active then
DataModule_dados.TblProdutos.Open;
if DataModule_dados.TblProdutos.Locate('FORNECEDOR', DataModule_dados.TblFornecedores.FieldByName('CODIGOFORNECEDOR'). AsString, []) then
begin
MessageDlg ('Este fornecedor não pode ser excluído, pois, possuí produtos associados a ele', mtInformation, [mbOK], 0);
Abort;
end
else
begin
DataModule_dados.TblFornecedor.Delete;//Confirmação da exclusão do registro
EditPesquisa.Clear;//Apagar dados da edit de pesquisa
EditPesquisa.SetFocus;//Selecionar edit de pesquisa
end;
end;
end
else
ShowMessage('Não existem mais dados a serem excluídos!');
end;
GOSTEI 0