[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