Fórum Estou tentando relacionar tabelas e não consigo ? #41473

10/01/2004

0

Primeiramente Obrigado por ter respondido minhas ultimas postagens e, a nivel de conhecimento, aquele problema de erro foi solucionado. Simplesmente eu estava ´gerando o sql´ sem selecionar o campo chave da tabela.

O Problema de Hoje é o seguinte. Tenho uma Tabela ´ibclientedataset_itens´ outra ´ibdataset_Pedidos´, Estou tentando fazer aquele tipo de relacionamento em que os dois se relacionam através de um ´datasource´. Relacionamento foi feito no mastersource do ´clientedataset_itens´. Será que falta alguma coisa, quando eu gero um novo pedido não, ele não gera o código na tabela ´itens´. Na verdade não acontece nada na tabela ´itens´.

Como faço para gerar o código do pedido no campo ´código do pedido´ da tabela ´itens´ usando o relacionamento entre ´ibdataset_Pedidos´+datasource+´ibclientedataset_itens´(Se isso é possivel!)?


Esse aplicativo esta sendo feito para ser usado em rede , Tem algums problema se ao invés de usar ´ibdataset e ibclientedataset´ usar ibTable(pois me parece mais simples!)?


Agradeço desde já sua resposta ou quem mais puder me responder!!!


Valdiney

Valdiney

Responder

Posts

12/01/2004

Dilao2000

Coloque no evento BEFOREINSERT da sua tabela secundária recebendo a chave primária da tabela primária.
Exemplo:

tbItens_Numero_do_Pedido.value := tbPedido_Numero.value


Responder

Gostei + 0

12/01/2004

Valdiney

Obrigado mais isso não responde por completo minha pergunta, além disso eu queria um precesso mais automático, tipo como se faz com duas ibtable.

Ainda Estou Aguardando uma resposta mais completa, mas mesmo assim obrigado pela dica!!! Na vida nada se perde tudo se transforma!!!


Responder

Gostei + 0

12/01/2004

Afarias

|O Problema de Hoje é o seguinte. Tenho uma
|Tabela ´ibclientedataset_itens´ outra ´ibdataset_Pedidos´,

1 - vc não devia misturar IBDataSets com ClientDataSets
2 - vc não devia usar IBClientDataSets -- estes componentes foram descontinuados -- em seu lugar deve-se usar ClientDataSets+DataSetProviders


|Estou tentando fazer aquele tipo de relacionamento em que os dois se
|relacionam através de um ´datasource´.

Basta pra isso q o DataSet detalhe contenha um SQL (ou SelectSQL) na forma::

SELECT * FROM TABELA_DETALHE
WHERE CAMPO_CHAVE_ESTRANGEIRA = :CAMPO_CHAVE_PRIMÁRIA

onde::

CAMPO_CHAVE_PRIMÁRIA é o nome do campo chave na tabela Mestre (note o : na frente do nome, o q caracteriza ser um parâmetro)


exemplo::


Tabela NOTA = (Numero, Data, ... )
Tabela ITENS_DA_NOTA = (Numero_Nota, Codigo_Produto, ... )


SELECT * FROM ITENS_DA_NOTA
WHERE NUMERO_NOTA = :NUMERO




T+


Responder

Gostei + 0

17/01/2004

Valdiney

Sua dica funcionou muito bem, Mas acho que eu deixei de fazer alguma configuração!!!!

Com figurei tudo do jeito que você me disse. Tire os “Ibdataset” incluir “DatasetProviders” e “ClientesDataSets”. Ele esta funcionando da seguinte forma:

Ibdatesetprodutos_pedidos-->DatasetProvider-->ClientesDataSet-->DSrelacionamento-->IbddatasetPedidos

·Agora estou conseguindo inserir o valor do código da tabela “master field”(pedidos) no campo código da tabela “detal fiel”(produtos_pedidos).
·Porém ao dar o “post” no “ClienteDataSet” ele não grava minhas alterações(os itens que incluir) pois é só desligar e ligar o programa que ele volta em branco.
·Tentei fazer “ClienteDatatSet.Applyupdates(0)”, mas deu um erro do tipo:
“Project x.exe rised exception class Eibclienterror with message ‘SQL parse error: parameter name expected’. Process stoped. Press step or run to continue.”


Acho que esta faltando alguma configuração boba, mas não consigo matar o problema.

Se não fosse pedir muito! Você poderia me passar passo-a-passo configuração de como ficariam esses componentes conectados entre si de acordo como eles estão dispostos acima?

Agradeço Desde já sua atenção!

Desculpe-me por importuna-lo mais uma vez mais é necessário!


Responder

Gostei + 0

17/01/2004

Afarias

|Com figurei tudo do jeito que você me disse. Tire os “Ibdataset”
|incluir “DatasetProviders” e “ClientesDataSets”.

Epa!!!! Não foi isso q eu disse!! -- O que eu disse:: OU vc trabalha com IBDataSets OU vc trabalha com ClientDataSets!

Sendo q se optar por trabalhar com ClientDataSets, vc deverá usar IBQuerys associados a eles e saber bem como funcionam (os CDS e os DataSetProviders)


|Ele esta funcionando da seguinte forma:
|Ibdatesetprodutos_pedidos-->DatasetProvider-->ClientesDataSet--
|>DSrelacionamento-->IbddatasetPedidos

Viu:: vc continua misturando ambos (fazendo um mestre/detalhe entre um IBDataSet e um ClientDataSet). Pelo q estou entendendo do seu sistema, vc deveria (AO Q ME PARECE) tirar os ClientDataSets e trabalhar apenas com IBDataSets.


|· Agora estou conseguindo inserir o valor do código da tabela “master
|field”(pedidos) no campo código da tabela “detal fiel”(produtos_pedidos).
|· Porém ao dar o “post” no “ClienteDataSet” ele não grava minhas
|alterações(os itens que incluir) pois é só desligar e ligar o programa que
|ele volta em branco.

Sim... Antes de poder usar ClientDataSets, vc deverá dar uma boa estudada em como funcionam. Neste meio tempo, vc pode seguir minha sugestão acima:: trabalhe apenas com IBDataSets.


|Se não fosse pedir muito! Você poderia me passar passo-a-passo
|configuração de como ficariam esses componentes conectados entre si
|de acordo como eles estão dispostos acima?

A dica da mensagem anterior, referia-se a um programa usando apenas IBDataSets -- para ClientDataSets a história é outra.


|Desculpe-me por importuna-lo mais uma vez mais é necessário!

Não há importúnio algum, o objetivo deste fórum é este mesmo -- trocar idéias, conferir problemas, dúvidas, etc...


Boa Sorte,
T+


Responder

Gostei + 0

17/01/2004

Valdiney

[b:e6faa03222]Eu estou amarrado mesmo!!![/b:e6faa03222]:lol:

Mas como eu trabalho com ´master fiel e detal fiel´ com ibdatasets se eles não possuem essas propriedades , pelo menos eu acho!! :oops:


[b:e6faa03222]Poderia me exemplificar como???[/b:e6faa03222]


Obrigado por sua atenção !! Estou evoluindo com suas respostas!!


Responder

Gostei + 0

21/01/2004

Afarias

Oi... :) estive ´meio´ ocupado esses dias...

Bom, quanto a fazer o relacionamento com o IBDataSet ... veja o 1º post q coloquei neste tópico! Foi justamente sobre isso q eu estava falando.

Vc faz a relação no SQL (propriedade SelectSQL) -- deixa q os componentes fazem o resto para vc.


T+


Responder

Gostei + 0

31/01/2004

Valdiney

Eu fiz o relacionamento entre ibdataset,ele esta assim:

ibdataset_produtos<---datasource<---ibdataset_itens

Não sei se esta correto o que estou tentando fazer , mas quando deleto o pedido... não deveria deletar também os seus itens automáticamente?Pois quando faço isso ele dá um erro dizendo que tem uma tabela que depende dele e eu tenho primeiro que deletar os itens dela!

Esta certo?

Obrigado mais uma vez! e agradeço desde ja sua resposta!


Responder

Gostei + 0

03/02/2004

Afarias

|Não sei se esta correto o que estou tentando fazer , mas quando deleto
|o pedido... não deveria deletar também os seus itens automáticamente?

Não

Para isso vc deve ter no banco de dados uma CONSTRAINT ou TRIGGER que faça essa operação.

Vc poderia fazer tb via código na sua aplicação.


|Pois quando faço isso ele dá um erro dizendo que tem uma tabela que
|depende dele e eu tenho primeiro que deletar os itens dela

Correto. Pq vc tem uma constraint configurada no banco (FOREIGN KEY) e ela não está configurada para exclusão em cascata (ON DELETE CASCADE)


T+


Responder

Gostei + 0

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

Aceitar