Fórum Lookup dbGrid com master-detail (2 campos relacionados) #295979
18/09/2005
0
Quero fazer um lookup no dbgrid com tabela com campo filtrado. Tenho as seguintes tabelas:
DICAS
--------
ID_Dica
ID_Assunto
ID_Topico
Descricao
...
ASSUNTOS
-------
ID_Assunto
Assunto
TOPICOS
------
ID_Topico
ID_Assunto
Titulo
=========================
ou seja, para preenchimento da tabela DICAS, preciso consultar dados nas tabelas ASSUNTOS
e na tabela TOPICOS, sendo essa última uma tabela que possui os valores relacionados à ASSUNTOS.
Não há nenhum problema para se utilizar DBLOOKUPCOMBO ou campos LOOKUPS dentro do dbGrid em relação
ao campo ASSUNTO,mas para a tabela TOPICOS não consegui fazer campos LOOKUPS (para uso no dbGrid).
Para usá-lo em DBLOOKUPCOMBO fiz o seguinte: Criei uma tabela (TBLOOKTOPICOS) relacionada à
tabela dicas (CDS_DICAS) pelo campo ID_Assunto, para filtrar apenas os tópicos referentes à esse
assunto. Então, inseri o componente TDBLOOKUPCOMBO usando o campo ID_Topico como chave.
Tentei utilizar dessa mesma forma para fazer o campo Lookup (uso no dbGrid), mas os resultados no
Grid só são mostrados de acordo com o último assunto editado (para todo o Grid). Estou refazendo um
programinha para exibição de DICAS DELPHI que pretendo disponibilizá-lo à comunidade interessada e gostaria
de ajuda.
Algumas informações dos componentes utilizados:
componente TTable: TBLOOKTOPICOS
object tbLookTopicos: TTable
DatabaseName = ´rotinas´
IndexName = ´idx_Assunto´
MasterFields = ´ID_Assunto´
MasterSource = dsDicas
TableName = ´Topicos.db´
end
-----------------------
object dsDicas: TDataSource
DataSet = cds_Dicas
end
-----------------------
CLIENTDATASET DICAS:
object cds_Dicas: TClientDataSet
Aggregates = <>
Params = <>
ProviderName = ´dsp_Dicas´
object cds_DicaslookAssunto: TStringField
DisplayLabel = ´Assunto´
FieldKind = fkLookup
FieldName = ´lookAssunto´
LookupDataSet = tbLookAssuntos
LookupKeyFields = ´Id_Assunto´
LookupResultField = ´Assunto´
KeyFields = ´ID_Assunto´
ProviderFlags = [pfInUpdate]
Lookup = True
end
object cds_DicaslookTopico: TStringField
DisplayLabel = ´Topico´
FieldKind = fkLookup
FieldName = ´lookTopico´
LookupDataSet = tbLookTopicos
LookupKeyFields = ´ID_Topico´
LookupResultField = ´Topico´
KeyFields = ´ID_Topico´
Lookup = True
end
object cds_DicasTitulo: TStringField
FieldName = ´Titulo´
Origin = ´ROTINAS.´DICAS_DELPHI.DB´.Titulo´
ProviderFlags = [pfInUpdate]
Size = 100
end
end
-----------------------------
cAMPO LOOKUP com TDBLOOKUPCOMBOX para Topico:
object DBLookupComboBox1: TDBLookupComboBox
Hint = ´T´#243´pico Relacionado ao Assunto´
DataField = ´ID_Topico´
DataSource = dsDicas
KeyField = ´ID_Topico´
ListField = ´Topico;id_topico´
ListSource = dm_Dicas.dslookTopicos
end
DICAS
--------
ID_Dica
ID_Assunto
ID_Topico
Descricao
...
ASSUNTOS
-------
ID_Assunto
Assunto
TOPICOS
------
ID_Topico
ID_Assunto
Titulo
=========================
ou seja, para preenchimento da tabela DICAS, preciso consultar dados nas tabelas ASSUNTOS
e na tabela TOPICOS, sendo essa última uma tabela que possui os valores relacionados à ASSUNTOS.
Não há nenhum problema para se utilizar DBLOOKUPCOMBO ou campos LOOKUPS dentro do dbGrid em relação
ao campo ASSUNTO,mas para a tabela TOPICOS não consegui fazer campos LOOKUPS (para uso no dbGrid).
Para usá-lo em DBLOOKUPCOMBO fiz o seguinte: Criei uma tabela (TBLOOKTOPICOS) relacionada à
tabela dicas (CDS_DICAS) pelo campo ID_Assunto, para filtrar apenas os tópicos referentes à esse
assunto. Então, inseri o componente TDBLOOKUPCOMBO usando o campo ID_Topico como chave.
Tentei utilizar dessa mesma forma para fazer o campo Lookup (uso no dbGrid), mas os resultados no
Grid só são mostrados de acordo com o último assunto editado (para todo o Grid). Estou refazendo um
programinha para exibição de DICAS DELPHI que pretendo disponibilizá-lo à comunidade interessada e gostaria
de ajuda.
Algumas informações dos componentes utilizados:
componente TTable: TBLOOKTOPICOS
object tbLookTopicos: TTable
DatabaseName = ´rotinas´
IndexName = ´idx_Assunto´
MasterFields = ´ID_Assunto´
MasterSource = dsDicas
TableName = ´Topicos.db´
end
-----------------------
object dsDicas: TDataSource
DataSet = cds_Dicas
end
-----------------------
CLIENTDATASET DICAS:
object cds_Dicas: TClientDataSet
Aggregates = <>
Params = <>
ProviderName = ´dsp_Dicas´
object cds_DicaslookAssunto: TStringField
DisplayLabel = ´Assunto´
FieldKind = fkLookup
FieldName = ´lookAssunto´
LookupDataSet = tbLookAssuntos
LookupKeyFields = ´Id_Assunto´
LookupResultField = ´Assunto´
KeyFields = ´ID_Assunto´
ProviderFlags = [pfInUpdate]
Lookup = True
end
object cds_DicaslookTopico: TStringField
DisplayLabel = ´Topico´
FieldKind = fkLookup
FieldName = ´lookTopico´
LookupDataSet = tbLookTopicos
LookupKeyFields = ´ID_Topico´
LookupResultField = ´Topico´
KeyFields = ´ID_Topico´
Lookup = True
end
object cds_DicasTitulo: TStringField
FieldName = ´Titulo´
Origin = ´ROTINAS.´DICAS_DELPHI.DB´.Titulo´
ProviderFlags = [pfInUpdate]
Size = 100
end
end
-----------------------------
cAMPO LOOKUP com TDBLOOKUPCOMBOX para Topico:
object DBLookupComboBox1: TDBLookupComboBox
Hint = ´T´#243´pico Relacionado ao Assunto´
DataField = ´ID_Topico´
DataSource = dsDicas
KeyField = ´ID_Topico´
ListField = ´Topico;id_topico´
ListSource = dm_Dicas.dslookTopicos
end
Yashin
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)