Integridade Referencial

Delphi

11/03/2004

Pessoal !!!!


Como faço uma integridade referencial usando interbase IBX e também usando o interbase dbexpress

EX: Tenho um cadastro de clientes
Tenho lançamento de pedidos para este cliente


Se caso eu excluir este cliente e houver pedido para este cliente como poderia tratar no banco ou no programa dizendo que existem pedidos para este cliente


Rogério


Rogeranalista

Rogeranalista

Curtidas 0

Respostas

Cabelo

Cabelo

11/03/2004

Uma das saídas seria vc criar chaves estrangeiras nos campos que as tabelas se relacionam..

Por exemplo :

Se vc Tiver uma Tabela de Emissão de Ordem de Serviços OS0100 com o campo C_COD_CLI, entre outros..

e uma tabela CA0100 de Cadastro de Clientes com o campo primário C_COD_CLI..

vc deveria criar uma ForeingKey na tabela OS0100, com o campo C_COD_CLI fazendo referência á tabela CA0100 no campo C_COD_CLI..

se vc tiver clientes cadastrados na tabela OS0100 e tentar excluir da tabela CA0100 o cliente do respectivo código, o banco de dados irá emitir uma mensagem falando sobre a foreingKey e não irá deixar excluir enquento houver registros na tabela OS0100 que contém o campo C_COD_CLI = ao que vc está tentando excluir..

Depois disso é só vc tratar o erro..

sem mais

Cabelo


GOSTEI 0
Rômulo Barros

Rômulo Barros

11/03/2004

Utilizando DbExpress e Interbase, faça o seguinte:

Código do botão para excluir um cliente:

...
Procedure BtnDelCli.Click(Sender : TObject);
Begin
   If(TabelaDetalhesPedidos.Locate(´Cod_Cli´),TabelaClientesCOD_CLI.AsInteger,[])Then
  showmessage(´Não pode excluir. Existem Associações´)
   Else
      TabelaClientes.Delete;
End;
...
:twisted: :twisted: :twisted: :twisted:

Ou ainda:

Adicione ´SQLExpr´ na cláusula USES:

Procedure BtnDelCli.Click(Sender : TObject);
Var
  Qry : TSqlQuery;
Begin
    Qry := TSqlQuery.Create(Nil);
    Try
       Qry.SqlConnection := DataModule.Conexao;
       Qry.Sql.Add(´SELECT * FROM TABELA_DETALHES_PEDIDOS´);
       Qry.Sql.Add(´WHERE COD_CLI = :parCOD_CLI´);
       Qry.Params.ParamByName(´parCOD_CLI´).AsString :=
       TabelaClientesCOD_CLI.AsString;
       Qry.Open;
       If(Qry.RecordCount > 0)Then
         ShowMessage(´Não pode excluir. Manter consistencia´)
       Else
         TabelaClientes.Delete;
    Except
         On Exc : Exception Do
            Showmessage(´Erro: ´+Exc.Message);
    End; 
End;



GOSTEI 0
POSTAR