[firebase-br] Cruzamento de tabelas

Marcelo Marchionny marcelomarchionny em gmail.com
Qua Mar 19 18:07:48 -03 2008


Boa Tarde Lista.

Já vasculhei um bocado da rede e não achei nada que me ajude.

Preciso fazer um cruzamento entre tabelas selecionadas em meu sistema afim
de pegar seus relacionamentos. OK até aqui facil "quando nas duas tabelas
existirem somente chave simples de ligação entre elas"

Tipo na Tabela TABELA1 tenho o campo CODIGO PK na TABELA2 o campo FK.

então consigo montar a tal ligação

TABELA1.CAMPO PK = TABELA2.CAMPO FK

agora quando,  em alguma tabela tenho uma chave composta com o código que
uso não consigo ter a ligação, entre a tabela com chave composta e a tabela
com a chave simples.

Então me pergunto não tem como mesmo fazer este cruzamento?

Existe alguma forma de fazer isso ?

Ah afim de ajudar segue o código que uso meu sistema é delphi e utilizo
firebird 1.5  sei que a lista é de FIREBIRD mas como acredito estar
totalmente no selecto código vai mais para ficar visivel a forma como estou
fazendo. Espero que ninguém se encomode.

Peço desculpas antecipado caso alguém não goste.




*procedure TFormGerencial.Ligacoes;
var
  i, u : Integer;
begin
  LigacaoTabelas.Clear;
  for i := 0 to SelecaoTabelas.Items.Count - 1 do
  begin
    BDados.IBBusca.Active := False;
    with BDados.QBusca do
    begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT A.RDB$INDEX_NAME , A.RDB$FIELD_NAME ,');
      SQL.Add('B.RDB$RELATION_NAME , B.RDB$FOREIGN_KEY ');
      SQL.Add('FROM RDB$INDEX_SEGMENTS A, RDB$INDICES B');
      SQL.Add('WHERE A.RDB$INDEX_NAME = B.RDB$INDEX_NAME');
      SQL.Add('AND RDB$RELATION_NAME  = '+#39+Trim(
SelecaoTabelas.Items.Strings[i])+#39); // AQUI REPASSO A TABELA*

*      SQL.Add('AND RDB$FOREIGN_KEY IS NULL');
      SQL.Add('ORDER BY A.RDB$FIELD_NAME');
      open;
    end;*

*    for u := 0 to SelecaoTabelas.Items.Count - 1 do
    begin
      BDados.IBCadastro.Active := False;
      with BDados.QCadastros do
      begin
        Close;
        SQL.Clear;
        SQL.Add('SELECT A.RDB$INDEX_NAME , A.RDB$FIELD_NAME ,');
        SQL.Add('B.RDB$RELATION_NAME , B.RDB$FOREIGN_KEY ');
        SQL.Add('FROM RDB$INDEX_SEGMENTS A, RDB$INDICES B');
        SQL.Add('WHERE A.RDB$INDEX_NAME = B.RDB$INDEX_NAME');
        SQL.Add('AND RDB$RELATION_NAME  = '+#39+Trim(
SelecaoTabelas.Items.Strings[u])+#39);
        SQL.Add('AND RDB$FOREIGN_KEY = '+#39+Trim(BDados.QBusca.FieldByName
('RDB$INDEX_NAME').AsString)+#39);
        SQL.Add('ORDER BY A.RDB$FIELD_NAME');
        open;
      end;*

*      while not BDados.QCadastros.eof do
      begin
        LigacaoTabelas.Items.Add(Trim(BDados.QBusca.FieldByName
('RDB$RELATION_NAME').AsString)+'.'+Trim(BDados.QBusca.FieldByName('RDB$FIELD_NAME').AsString)+'
= '+
                                 Trim(BDados.QCadastros.FieldByName
('RDB$RELATION_NAME').AsString)+'.'+Trim(BDados.QCadastros.FieldByName
('RDB$FIELD_NAME').AsString));*

*        BDados.QCadastros.Next;
        BDados.QBusca.Next;
      end;
  end;*

*end;*

Agradeço a todos.
Marcelo



Mais detalhes sobre a lista de discussão lista