Problema ao concluir uma pesquisa com dblookupcombobox
Tenho um formendereco para cadastro de endereço. O componente de escolha é o dblookupcombobox, e funciona no esquema de primeiro escolho a UF e no próximo dblookupcombobox ele me mostra somente as cidade daquele estato, e assim até a rua. O que fiz foi colocar no evento onexit de cada dblookupcombobox o select para a filtragem do próximo. Até aí tudo ok. Criei um botao para pesquisa de endereços cadastrado que chama outro form, neste, faço o filtro e escolho o endereço que quero e carrego para o formendereco, o problema é que só consigo visualizar o endereço selecionado nos dblookupcombobox depois q passo por todos eles (via tab). Eles estão com o keyvalue correto, mas só me mostram depois que passo por eles. Tem alguma função ou evento onde por programação ele já me mostrasse os valores sem ter a necessidade de passar por cada dblookupcombobox. Agradeço a atenção.
Rochajl
Curtidas 0
Respostas
Rochajl
23/07/2008
Se alguem puder ajudar, agradeço!!!
GOSTEI 0
Aroldo Zanela
23/07/2008
Colega,
Coloca um fragmento de seu código para ajudar no entendimento de sua necessidade.
Coloca um fragmento de seu código para ajudar no entendimento de sua necessidade.
GOSTEI 0
Rochajl
23/07/2008
No Form de pesquisa, no evento onclick do botao Editar Selecao tem o código:
procedure TfrmEnderecosPesq.BtnEditSelClick(Sender: TObject);
begin
//Ativação dos Campos do formulario Endereço//
frmEnderecos.EdtCEP.Enabled:=true;
EdtRecebeDados(Sender);
if dm.IBQSelEndereco.RecordCount > 0 then
begin
frmEnderecos.EdtCEP.Text:= frmEnderecosPesq.DBGrid1.DataSource.DataSet.Fields[6].AsString;
frmEnderecos.CBUF.KeyValue:= frmEnderecosPesq.DBGrid1.DataSource.DataSet.Fields[1].AsInteger;
frmEnderecos.CBRua.KeyValue:= frmEnderecosPesq.DBGrid1.DataSource.DataSet.Fields[5].AsInteger;
frmEnderecos.CBCidade.KeyValue:= frmEnderecosPesq.DBGrid1.DataSource.DataSet.Fields[2].AsInteger;
frmEnderecos.CBBairro.KeyValue:= frmEnderecosPesq.DBGrid1.DataSource.DataSet.Fields[3].AsInteger;
end;
frmEnderecosPesq.Close;
end;
procedure TfrmEnderecosPesq.EdtRecebeDados(Sender: TObject);
begin
dm.IBQSelEndereco.Open;
end;
Fechando o form de Pesquisa o sistema volta para o form de endereço onde tenho um DBedit com o CEP q fica preenchido corretamente com o CEP escolhido no form pesquisa e no evento onchange deste tenho um código que habilita o dblookupcombobox da UF, que também está com a UF preenchida corretamente, a partir daí, todos os outros dblookupcombobox estão disables (por mais q eu coloque no evento on change do DBedit CEP para q eles fiquem enable), e só consigo ver o restante da pesquisa ao dar tab pelos campos. Eles possuem os dados corretos, mas só visualizo a medida q dou o tab.
Tenho o seguinte código a no evento onexit de cada dblookupcombobox:
procedure TfrmEnderecos.CBUFExit(Sender: TObject);
begin
dm.IBQSelCidade1.Close;
dm.IBQSelCidade1.SQL.Clear;
dm.IBQSelCidade1.SQL.Add(´select * from tab_cidade, tab_uf´);
dm.IBQSelCidade1.SQL.Add(´where tab_cidade.tb_uf=:par_uf and´);
dm.IBQSelCidade1.SQL.Add(´tab_cidade.tb_uf=tab_uf.cod_uf´);
dm.IBQSelCidade1.SQL.Add(´order by cidade´);
dm.IBQSelCidade1.ParamByName(´par_uf´).Value := CBUF.KeyValue;
dm.IBQSelCidade1.Open;
dm.IBQSelCidade1.FetchAll;
end;
em cada dblookupcombobox tenho o select para o próximo, para q ele me mostre somente os dados corretos.
Bem, o q ainda não consegui fazer, foi q ao clicar no botão Editar Seleção do form pesquisa, os dblookupcombobox, já venham todos preenchidos.
Espero q possam ajudam.
procedure TfrmEnderecosPesq.BtnEditSelClick(Sender: TObject);
begin
//Ativação dos Campos do formulario Endereço//
frmEnderecos.EdtCEP.Enabled:=true;
EdtRecebeDados(Sender);
if dm.IBQSelEndereco.RecordCount > 0 then
begin
frmEnderecos.EdtCEP.Text:= frmEnderecosPesq.DBGrid1.DataSource.DataSet.Fields[6].AsString;
frmEnderecos.CBUF.KeyValue:= frmEnderecosPesq.DBGrid1.DataSource.DataSet.Fields[1].AsInteger;
frmEnderecos.CBRua.KeyValue:= frmEnderecosPesq.DBGrid1.DataSource.DataSet.Fields[5].AsInteger;
frmEnderecos.CBCidade.KeyValue:= frmEnderecosPesq.DBGrid1.DataSource.DataSet.Fields[2].AsInteger;
frmEnderecos.CBBairro.KeyValue:= frmEnderecosPesq.DBGrid1.DataSource.DataSet.Fields[3].AsInteger;
end;
frmEnderecosPesq.Close;
end;
procedure TfrmEnderecosPesq.EdtRecebeDados(Sender: TObject);
begin
dm.IBQSelEndereco.Open;
end;
Fechando o form de Pesquisa o sistema volta para o form de endereço onde tenho um DBedit com o CEP q fica preenchido corretamente com o CEP escolhido no form pesquisa e no evento onchange deste tenho um código que habilita o dblookupcombobox da UF, que também está com a UF preenchida corretamente, a partir daí, todos os outros dblookupcombobox estão disables (por mais q eu coloque no evento on change do DBedit CEP para q eles fiquem enable), e só consigo ver o restante da pesquisa ao dar tab pelos campos. Eles possuem os dados corretos, mas só visualizo a medida q dou o tab.
Tenho o seguinte código a no evento onexit de cada dblookupcombobox:
procedure TfrmEnderecos.CBUFExit(Sender: TObject);
begin
dm.IBQSelCidade1.Close;
dm.IBQSelCidade1.SQL.Clear;
dm.IBQSelCidade1.SQL.Add(´select * from tab_cidade, tab_uf´);
dm.IBQSelCidade1.SQL.Add(´where tab_cidade.tb_uf=:par_uf and´);
dm.IBQSelCidade1.SQL.Add(´tab_cidade.tb_uf=tab_uf.cod_uf´);
dm.IBQSelCidade1.SQL.Add(´order by cidade´);
dm.IBQSelCidade1.ParamByName(´par_uf´).Value := CBUF.KeyValue;
dm.IBQSelCidade1.Open;
dm.IBQSelCidade1.FetchAll;
end;
em cada dblookupcombobox tenho o select para o próximo, para q ele me mostre somente os dados corretos.
Bem, o q ainda não consegui fazer, foi q ao clicar no botão Editar Seleção do form pesquisa, os dblookupcombobox, já venham todos preenchidos.
Espero q possam ajudam.
GOSTEI 0
Aroldo Zanela
23/07/2008
Tenho o seguinte código a no evento onexit de cada dblookupcombobox:
Colega,
Experimente trocar o código do evento OnExit para o OnChange.
GOSTEI 0
Rochajl
23/07/2008
Não existe evento onchange no dblookupcombobox.
GOSTEI 0
Aroldo Zanela
23/07/2008
Colega,
Você pode:
1. Criar um componente descendente e adicionar a funcionalidade usando TNotifyEvent para a implementação.
2. Usar um componente de terceiro, como: (RxLib, Jedi, etc);
3. Mudar sua estratégia para o OnChange do DataSource;
Você pode:
1. Criar um componente descendente e adicionar a funcionalidade usando TNotifyEvent para a implementação.
FOnChange: TNotifyEvent; ... property OnChange: TNotifyEvent read FOnChange write FOnChange; ... procedure TSeuLookupControl.Change; begin if Assigned(FOnChange) then FOnChange(Self); end; ...
2. Usar um componente de terceiro, como: (RxLib, Jedi, etc);
3. Mudar sua estratégia para o OnChange do DataSource;
GOSTEI 0
Rochajl
23/07/2008
Obrigado. Usei o componente RxLib e funcionou corretamente.
GOSTEI 0
Rochajl
23/07/2008
Segue o link do componentes para instalação no Delphi 7: http://www.cpusoft.com.br/profmarcos/LPII/
GOSTEI 0