PK composta e FK em FireBird com Delphi

09/07/2004

0

Pessoal estou testando a utilização de chaves compostas em relacionamentos entre tabelas.
Como uso o FireBird criei 3 tabelas:

CLIENTES DEPENDENTES MOVIMENTACOES

nome
idade nome
idade data

ps.: os campos entre {} são as PK´s.

1 CLIENTE tem N DEPENTENDES, 1 DEPENTENTE tem N MOVIMENTACOES.
No banco de dados consegui fazer os FK´s entre as tabelas tudo ok.

A minha pergunta é como posso fazer na aplicação para alimentar a tabela MOVIMENTACOES nos campos e de uma só vez como é feito utilizando um ´DBLookupComboBox´ para alimentar um campo só???


Aguardo retorno... muito obrigado.


Judafox

Judafox

Responder

Posts

11/07/2004

Judafox

Agora fico Melhor.... :lol:

Pessoal estou testando a utilização de chaves compostas em relacionamentos entre tabelas.
Como uso o FireBird criei 3 tabelas:

CLIENTES

nome
idade

DEPENDENTES


nome
idade

MOVIMENTACOES



data

ps.: os campos entre {} são as PK´s.

1 CLIENTE tem N DEPENTENDES, 1 DEPENTENTE tem N MOVIMENTACOES.
No banco de dados consegui fazer os FK´s entre as tabelas tudo ok.

A minha pergunta é como posso fazer na aplicação para alimentar a tabela MOVIMENTACOES nos campos e de uma só vez como é feito utilizando um ´DBLookupComboBox´ para alimentar um campo só por exemplo???


Aguardo retorno... muito obrigado.
_________________


Responder

12/07/2004

Judafox

Será que vo te que alterar as chaves primárias apra um campo somente???

Alguem me ajude!!!


Responder

12/07/2004

Paulo_amorim

[quote:c31debee63=´Glauber de Bortoli´]Será que vo te que alterar as chaves primárias apra um campo somente???

[/quote:c31debee63]

Olá

Na minha opinião, a resposta eh não.
Mexa na aplicação, nao no modelo de dados...

O que vc quer exatamente?Como assim alimentar a tablea movimentação?

Você não pode fazer 2 DBLookUpComboBoxes?
Dá uma explicada melhor que a gente ajuda :)

Até+


Responder

12/07/2004

Rômulo Barros

Com o componente TDBLookupComboBox voce resolverá o problema, configurando as propriedades:

1 - TDBLookupComboBox1:
DataSource, DataField(CodigoDependente),ListSource,ListField(NomeDependente) e KeyField(CodigoDependente).

2 - TDBLookupComboBox2:

DataSource, DataField(CodigoCliente),ListSource,ListField(NomeCliente) e KeyField(CodigoCliente).


Responder

12/07/2004

Paulo_amorim

[quote:9d1f02ffc1=´Undeclared Identifier´]DataSource, DataField(CodigoCliente),ListSource,ListField(NomeCliente) e KeyField(CodigoCliente).[/quote:9d1f02ffc1]

Olá

Quando eu uso eu não configuro as 2 primeiras( DataSource e DataField)...pra que elas servem?

Até+


Responder

12/07/2004

Rômulo Barros

[quote:33b7ed79e8=´Undeclared Identifier´]DataSource, DataField(CodigoCliente),ListSource,ListField(NomeCliente) e KeyField(CodigoCliente).


Olá

Quando eu uso eu não configuro as 2 primeiras( DataSource e DataField)...pra que elas servem?

Até+[/quote:33b7ed79e8]

Exemplo:

Table Marcas
Cod_Marc
Nome_Marc

Table Modelos
Cod_Mod
Cod_Marc
Nome_Modelo


Para cadastrar um modelo, é necessário q o usuário selecione uma marca. Daí então a propriedade DataSource do meu DBLookupComboBox irá apontar para o datasource ligado a tabela de modelos (´select * from modelos), e a propriedade DataField eu configuro para o campo ´CodMarc´(este campo irá armazenar o código da marca que o usuário selecionar no dblookupcombobox). Deveremos configurar agora o listsource e o listfield(campo de listagem) e, por último, configuramos a propriedade KeyField(Campo de junção)

Deu pra entender? Quando o usuário selecionar uma ´Marca´ no dblookupcombobox, automaticamente em ´background´ o código da marca é armazenado do Field CodMarc da tabela Produtos, entendeu?


Responder

12/07/2004

Judafox

Undeclared,

sobre o que vc respondeu....?

Se eu tiver dois DBLockupComboBoxs eles vão listar todos os registros da tabela...

Se os registros das tabelas forem esses

CLIENTES
1 - joão - 20
2 - teste - 25

DEPENDENTES
1 - 1 - joaquim - 10
2 - 1 - fulano - 12
1 - 2 - beltrano - 15

e quando eu quiser cadastrar uma movimentação para o dependende do ´teste´ por exemplo, eu seleciono o clinete ´teste´ no 1º DBLockupComboBox e quando vou selecionar o seu dependente no 2º DBLockupComboBox ele aparece tbm os dependentes do cliente ´joão´ assim podendo selecionar os outros registros da tabela... ele não vai deixar gravar... mas eu gostaria que nem mostrace os outros.

Obrigado por enquanto... :roll:


Responder

12/07/2004

Rômulo Barros

[quote:6712cfa977=´Meu amigo ´]... eu seleciono o clinete ´teste´ no 1º DBLockupComboBox e quando vou selecionar o seu dependente no 2º DBLockupComboBox ele aparece tbm os dependentes do cliente ´joão´ assim podendo selecionar os outros registros da tabela... [/quote:6712cfa977]

Irá aparecer apenas os registros ´amarrados´ com a sua opção. Se não for, faça um Master/Detail :wink:


Responder

12/07/2004

Paulo_amorim

[quote:353f9f1984=´Undeclared Identifier´]
Deu pra entender? Quando o usuário selecionar uma ´Marca´ no dblookupcombobox, automaticamente em ´background´ o código da marca é armazenado do Field CodMarc da tabela Produtos, entendeu?[/quote:353f9f1984]

Olá

Aí que eunão entendi...pois eu sempre uso somente o ListSource, o ListField pra mostrar os campos, enquanto eu pego o KeyField pro campo de junção...e nao uso o DataSource...


e quando eu quiser cadastrar uma movimentação para o dependende do ´teste´ por exemplo, eu seleciono o clinete ´teste´ no 1º DBLockupComboBox e quando vou selecionar o seu dependente no 2º DBLockupComboBox ele aparece tbm os dependentes do cliente ´joão´ assim podendo selecionar os outros registros da tabela... ele não vai deixar gravar... mas eu gostaria que nem mostrace os outros.


Coloque 2 datasets...
o primeiro pega os dependentes...
o segundo pega as movimentaçoes WHERE dependente = :p1

dai no onClick do primeiro vc passa o parametro pro segundo DataSet...

Espero que ajude
Até+


Responder

12/07/2004

Rômulo Barros

Aí que eunão entendi...pois eu sempre uso somente o ListSource, o ListField pra mostrar os campos, enquanto eu pego o KeyField pro campo de junção...e nao uso o DataSource...


Pois é. Eu nunca utilizei o dblookupcombobox [color=red:558a7992e4]sem[/color:558a7992e4] configurar as propriedade DataSource,DataField,ListSource,ListField e KeyField. Utilizo DataSource para indicar em qual dataset será armazenado o valor do campo a ser listado. Quem indica o campo é a propriedade DataField

:wink: :wink: :wink: :wink:


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar