Array
(
)

Relação de tabelas na exclusao de itens

Daniel
   - 02 ago 2010

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;

ERILEY VILAGRANDE BARBOSA
   - 02 ago 2010

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

ERILEY VILAGRANDE BARBOSA
   - 02 ago 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

0
|
0

Daniel
   - 02 ago 2010


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

ERILEY VILAGRANDE BARBOSA
   - 02 ago 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

0
|
0

Daniel
   - 02 ago 2010


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

ERILEY VILAGRANDE BARBOSA
   - 02 ago 2010

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

0
|
0

ERILEY VILAGRANDE BARBOSA
   - 02 ago 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

0
|
0

Daniel
   - 02 ago 2010


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

Daniel
   - 02 ago 2010


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

ERILEY VILAGRANDE BARBOSA
   - 03 ago 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

0
|
0

Daniel
   - 03 ago 2010


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:
 
[tagcod]procedure TForm_Exclusao_Fornecedor.BotaoExcluirClick(Sender]
 
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
|
0

ERILEY VILAGRANDE BARBOSA
   - 03 ago 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

0
|
0

ERILEY VILAGRANDE BARBOSA
   - 03 ago 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;

0
|
0