Fórum Master Details com Firebird #45079

23/06/2004

0

Pessoal estou com umas duvidas de como fazer master details com o firebird, existe o IBTable ali eu faço mas nao gostaria de por sql, gostaria de saber se alguem pode me dar um exemplo eu tentei fazer com o que li sobre foreign key so que nao ta funcionando fiz assim...

CREATE TABLE CLIENTE (
CODIGO INTEGER NOT NULL,
NOME VARCHAR(20)
);

ALTER TABLE CLIENTE ADD CONSTRAINT PK_CODIGO PRIMARY KEY (CODIGO);

__________________________________________________________

CREATE TABLE DADOS (
CODIGO INTEGER NOT NULL,
CODIGOLIGACAO INTEGER,
ENDERECO VARCHAR(20)
);

ALTER TABLE DADOS ADD CONSTRAINT PK_CODIGODADOS PRIMARY KEY (CODIGO);

ALTER TABLE DADOS ADD CONSTRAINT FK_LIGACAO FOREIGN KEY (CODIGOLIGACAO) REFERENCES CLIENTE (CODIGO);

__________________________________________________________

Colocando os componentes no delphi IBDatabase - IBDataset e IBtransation liguei entre eles, fiz botao de incluir e gravar, coloquei grid isso duas vezes um para cada tabela, DADOS e CLIENTE, cadastrado e tudo ao selecionar no grid o cliente um ele não mostra no grid de baixo so os dados daquele cliente e sim de todos, como faço máster details ? qual seria a melhor forma !!!

Ainda nao aprendi legal sobre Foreign key pelo que entendi e andei lendo ate aqui no forum seria isso o uso dele... !! Valeu !!!


Renato_sp

Renato_sp

Responder

Posts

23/06/2004

Afarias

apenas na query/dataset DETALHE coloque::

select * from tabela_detable where campo_mestre = :campo_chave


onde o parâmetro campo_chave tem o mesmo nome do campo_chave na tabela mestre.

então configure a propriedade DataSource para um DataSource ligado a query/dataset mestre.


T+


Responder

Gostei + 0

23/06/2004

Renato_sp

Afarias deu certo aqui o que vc me passou, porem no form que estou trabalhando eu vou mostrar o relacionamento (máster details) e tbm poderá adicionar registro, no caso a pessoa escolhe no grid de cima um registro no debaixo mostra so daquele pedido de cima, ate ai funcionou, porem agora para eu inserir eu to usando o IBDataset, ai vem a duvida é melhor ficar alternando o Datasource quando inserir pegar os dados do IBDataset e mostra no grid.. e na hora de visualizar mudar o datasource para o IBquery? Ou é preferível inserir pelo próprio IBQuery e mostrar por ele tbm, eliminando o IBDataset? Ou então usar o IBTable ? máster details com SQL ta sendo um pouco complicado, to meio perdido, me de uma opinião, resumindo tudo a duvida é.

A-Para fazer máster details usa o IBQuery e para não ficar alternando o datasource , inserir com o IBQuery tbm

B – Ou então ficar alternando o Datasource mais ou menos assim

Ligação – Esta funcionando isso

DataSourceDados.DataSet:=IBQueryDados; << aqui eu troquei o datasource
IBQueryDados.Close;
IBQueryDados.SQL.Clear;
IBQueryDados.SQL.add(´Select * from Dados ´);
IBQueryDados.SQL.add(´where CodigoLigacao = ´+QuotedStr(IBQuery1CODIGO.AsString));
IBQueryDados.Prepare;
IBQueryDados.Open;

Ao Inserir


if not IBDataSetDados.active then
IBDataSetDados.open;
DataSourceDados.DataSet:=IBDataSetDados; << aqui eu troquei o datasource
IBDataSetDados.Insert;


C &8211; Ou então usar IBTable ou qualquer outra coisa

Me de uma opinião de como fazer máster details sem comprometer muito, o que vc acha que fica bom... Valeu espero ter sido claro qualquer coisa se não entender escrevo falando mais


Responder

Gostei + 0

23/06/2004

Gandalf.nho

Pra que que usar o IBQuery, se com o IBDataset você pode visualizar, editar, incluir e excluir? Basta configurar as querys auxiliares adequadamente e pronto.


Responder

Gostei + 0

23/06/2004

Afarias

NADA de TABLES!!!! :wink:

como disse o gandalf, vc não precisa um IBQuery (somente leitura) e um IBDataSet... use apenas 1 IBDataSet para o mestre e 1 para o Detalhe.

IBDataSet = IBQuery + IBUpdateSQL



T+


Responder

Gostei + 0

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

Aceitar