DevMedia

Relação de tabelas na exclusao de itens

0
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:   #Código
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;
Publicidade

Respostas (13)

0
No Before Delete da tabela de fornecedores, coloque o seguinte código: #Código
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
0
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
0

Citação:
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)
0
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
0

Citação:
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 
0
No uses do seu DataModule declare a Unit Dialogs, como abaixo:   uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;   Atenciosamente   Eriley
0
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
0

Citação:
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
0

Citação:
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
0
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
0

Citação:
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:   #Código
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;
  Obs: esta linha de codigo peguei da tabela fornecedor.   e a estrutura da tabela fornecedor e   TABELA FORNECEDOR   CODIGOFORNECEDOR - LONG - NOT NULL FORNECEDOR - VARCHAR - NOT NULL ENDERECO - VARCHAR CIDADE - CHAR ESTADO - CHAR TELEFONEEMPRESA - CHAR - NOT NULL REPRESENTANTE - VARCHAR TELEFONEREPRESENTANTE - CHAR OBSERVACAO - VARCHAR     TABELA PRODUTOS
CODIGOPRODUTO - LONG - NOT NULL FORNECEDOR - VARCHAR - NOT NULL PRODUTO - VARCHAR - NOT NULL UNIDADE - CHAR VALORUNITARIO - FLOAT OBSERVACAO - VARCHAR
0

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
0
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;