Problema ao concluir uma pesquisa com dblookupcombobox

23/07/2008

0

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

Responder

Posts

24/07/2008

Rochajl

Se alguem puder ajudar, agradeço!!!


Responder

24/07/2008

Aroldo Zanela

Colega,

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


Responder

24/07/2008

Rochajl

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.


Responder

25/07/2008

Aroldo Zanela

Tenho o seguinte código a no evento onexit de cada dblookupcombobox:

Colega,

Experimente trocar o código do evento OnExit para o OnChange.


Responder

25/07/2008

Rochajl

Não existe evento onchange no dblookupcombobox.


Responder

25/07/2008

Aroldo Zanela

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;


Responder

26/07/2008

Rochajl

Obrigado. Usei o componente RxLib e funcionou corretamente.


Responder

26/07/2008

Rochajl

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


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar