Relação de tabelas na exclusao de itens

02/08/2010

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:  
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

Daniel

Responder

Posts

02/08/2010

Eriley Barbosa

No Before Delete da tabela de fornecedores, coloque o seguinte 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
Responder

02/08/2010

Eriley Barbosa

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
Responder

02/08/2010

Daniel

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)
Responder

02/08/2010

Eriley Barbosa

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
Responder

02/08/2010

Daniel

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 
Responder

02/08/2010

Eriley Barbosa

No uses do seu DataModule declare a Unit Dialogs, como abaixo:   uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;   Atenciosamente   Eriley
Responder

02/08/2010

Eriley Barbosa

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
Responder

02/08/2010

Daniel

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
Responder

02/08/2010

Daniel

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
Responder

03/08/2010

Eriley Barbosa

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
Responder

03/08/2010

Daniel

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:  
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
Responder

03/08/2010

Eriley Barbosa

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
Responder

03/08/2010

Eriley Barbosa

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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar