Problema ao concluir uma pesquisa com dblookupcombobox

Delphi

23/07/2008

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

Rochajl

Curtidas 0

Respostas

Rochajl

Rochajl

23/07/2008

Se alguem puder ajudar, agradeço!!!


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

23/07/2008

Colega,

Coloca um fragmento de seu código para ajudar no entendimento de sua necessidade.


GOSTEI 0
Rochajl

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.


GOSTEI 0
Aroldo Zanela

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

Rochajl

23/07/2008

Não existe evento onchange no dblookupcombobox.


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

23/07/2008

Colega,

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

Rochajl

23/07/2008

Obrigado. Usei o componente RxLib e funcionou corretamente.


GOSTEI 0
Rochajl

Rochajl

23/07/2008

Segue o link do componentes para instalação no Delphi 7: http://www.cpusoft.com.br/profmarcos/LPII/


GOSTEI 0
POSTAR