Fórum Problema com Mestre-Detalhe, Lookup e Filtros #387114
24/09/2010
0
ii) ARMARIO:
iii) ARMARIO_FUNCIONARIO; (Mestre-Detalhe);
2º: Crio uma nova aplicação e insiro um Data Module:
CommandText (SDSARMARIO): SELECT * FROM ARMARIO CommandText (SDSFUNCIONARIO): SELECT * FROM FUNCIONARIO CommandText (SDSARMARIO_FUNCIONARIO): SELECT * FROM ARMARIO_FUNCIONARIO WHERE IDFUNCIONARIO = :IDFUNCIONARIO
3º: CRIO AS TELAS DE INSERÇÃO DE ARMÁRIOS E FUNCIONÁRIOS:
Tela 1 – Tela de Cadastro de Armários
Tela 2 – Tela de Cadastro de Funcionários e seus respectivos Armários
4º: Crio os Campos LookUp no CDSARMARIO_FUNCIONARIO:
Criação dos Fields NOME e TIPO
5º: Criação da Tela para adicionar armários no grid dos funcionários:
O click do botão faz o seguinte comando: FrmPrincipal.LocalizarLookup(DS1.DataSet, 'ARMARIO', 'IDARMARIO', 'DESCRICAO', 'Pesquisar Armário '); E a procedure LocalizarLookup tem o seguinte comando: procedure TFrmPrincipal.LocalizarLookup(xDSOrigem: TDataSet; xDescricaoLookup, xCodigo, xDescricao, xTituloPanel: String); begin Try FrmPesquisa := TFrmPesquisa.Create(Self); With FrmPesquisa do begin DSPesquisa.DataSet := xDSOrigem.FieldByName(xDescricaoLookup).LookupDataSet; Grid1.Columns[0].FieldName := xCodigo; Grid1.Columns[1].FieldName := xDescricao; xCampoPesquisa := xDescricao; Pnl1.Caption := xTituloPanel; ShowModal; if FrmPesquisa.ModalResult = mrOk then if xDSOrigem.State in [dsInsert,dsEdit] then xDSOrigem.FieldByName(xCodigo).AsString := DSPesquisa.DataSet.FieldByName(xCodigo).AsString; end; Finally FreeAndNil(FrmPesquisa); End; end; Como NOME e TIPO são campos lookup, eu vou buscar através da uma tela de pesquisa que me mostre todos os armários. Este seria um trabalho facilmente desenvolvido por uma dblookupcombobox, entretanto, este traria à memória todos os armários e o objetivo de buscar uma tela de pesquisa é justamente filtrar o que eu preciso. 6º: Características da Tela de Pesquisa
O click do botão tem o seguinte comando: With TClientDataSet(DSPesquisa.DataSet) do begin Close; Filtered := False; Filter := UpperCase(xCampoPesquisa + ' Like ' + QuotedStr('%' + EdtConteudo.Text + '%')); Filtered := True; Open; end; DSPesquisa.DataSet.First; 7º: O PROBLEMA > Já cadastrada a lista de armários, eu sigo o processo para cadastramento dos funcionários e seus respectivos armários. Da seguinte forma:
Aparecerá a seguinte tela:
Aparecerá a tela de Pesquisa de armários: Onde eu estarei pesquisando o armário de descrição ARM004 e clico na lupa para filtrar o dataset e me trazer a resposta somente do que preciso:
Dando um duplo clique no grid, tenho:
Clico em post , fecho a tela e terei os armários adicionados na grid, mas ao repetir o processo para o segundo e terceiro armário, observe que na grid somente o primeiro armário adicionado aparecem os dados, para o segundo e terceiro não:
Mas, se fechar e abrir o executável, os dados estão lá:
Galera, me ajudem com este problema aí! Estou tentando fazer o upload do código fonte do exemplo acima mas o site não está aceitando.
Att.
Rafael
Rafael Ribeiro
Curtir tópico
+ 0Posts
24/09/2010
Eriley Barbosa
Gostei + 0
24/09/2010
Rafael Ribeiro
EU COLOQUEI TUDO "FALSE" E O PROBLEMA CONTINUA. EU TENHO CERTEZA QUE ISSO TEM A VER COM OS FILTROS.
Gostei + 0
24/09/2010
Eriley Barbosa
Gostei + 0
24/09/2010
Rafael Ribeiro
FOI COMO EU DISSE... EU SABIA QUE O PROBLEMA ERA O FILTRO. E COMO VOCÊ, TAMBÉM, DISSE OS DADOS FICAVAM FILTRADOS. EU APLIQUEI O CDS.FILTERED := FALSE EM VÁRIOS LUGARES E NUNCA DAVA CERTO. MAS, FINALMENTE, ENCONTREI O LOCAL CERTO. DEPOIS QUE EU CHAMO A FUNÇÃO LOCALIZAR LOOKUP, EU TIRO O FILTRO. AGORA SIM.... DEPOIS DE MESES DEU CERTO!
MUITO OBRIGADO!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)