Logo Hardware.com.br
Lucio Campetti
Lucio Campet... Membro Junior Registrado
92 Mensagens 0 Curtidas

Duvida Filtrar DBLookup com SQL Query

#1 Por Lucio Campet... 05/04/2014 - 22:16
Uso Delphi 7 Firebird 2.5 componentes da paleta interbase ibquery
Estou com o seguinte problema: tenho as tabelas TAB_Cidest (Cidade Estado) e TAB_Bairro, e estou utilizando dois dblookupCombobox no formulário de clientes, um para selecionar a cidade e outro para selecionar o bairro. no formulario cliente.
porem gostaria que o processo fosse o seguinte:
Quando o usuário selecionar a cidade(DBlookupCidest) apenas aparecer os bairros (DBlookupBairro) referentes a cidade selecionada. No momento aparece todos os bairros independente da cidade selecionada.
como posso realizar este processo. Gostaria que fosse bem detalhado pois estou com dificuldade em associar a logica.
Agradeço a todos.

Minhas Tabelas:
[CODE=rich]

PK Chave primaria
FK Chave extrangeira

CREATE TABLE TAB_CLIENTE (
COD_CLIENTE INTEGER NOT NULL, (PK)
COD_PROFISSAO INTEGER, (FK)
HORADATACAD TIMESTAMP,
NOMECLIENTE VARCHAR(100),
NOMEPAI VARCHAR(100),
NOMEMAE VARCHAR(100),
CPF VARCHAR(14),
RG VARCHAR(13),
ANIVERSARIO DATE,
CEP VARCHAR(8),
ENDERECO VARCHAR(100),
NUMERO VARCHAR(10),
COMPLEMENTO VARCHAR(100),
COD_BAIRRO INTEGER, (FK)
COD_CIDEST INTEGER,(FK)
TELRES VARCHAR(14),
TELCEL VARCHAR(14),
EMAIL VARCHAR(100),
OBSERVACAO VARCHAR(200),
IMAGEM VARCHAR(200),
INDICACAO VARCHAR(100)
);



CREATE TABLE TAB_CIDEST (
COD_CIDEST INTEGER NOT NULL, (PK)
NOMECIDADE VARCHAR(100),
NOMEESTADO VARCHAR(2)
);




CREATE TABLE TAB_BAIRRO (
COD_BAIRRO INTEGER NOT NULL, (PK)
COD_CIDEST INTEGER, (FK)
NOMEBAIRRO VARCHAR(100)
);

[/CODE]

Tentei fazer desta maneira:

No evento OnExit do dblookupCidest coloquei o seguinte código:
[CODE=rich]

procedure TFrmCliente.DBLkCidEstExit(Sender: TObject);
BEGIN //Sai cor
begin
if (Sender is TDBLookupComboBox) then
begin
TDBLookupComboBox(Sender).Color:=clWindow;
// mudar a cor do componente.
end;

begin
DTM.QRY_PegaBairro.Close;
DTM.QRY_PegaBairro.SQL.Add('Select *');
DTM.QRY_PegaBairro.SQL.Add('From TAB_BAIRRO');
DTM.QRY_PegaBairro.SQL.Add('Where COD_CIDEST = :PRMcidest');
DTM.QRY_PegaBairro.ParamByName('PRMcidest').AsInteger:=DBLkBairro.KeyValue;
DTM.QRY_PegaBairro.Open;

{código usado no ibexpert
{
Select NOMEBAIRRO
From TAB_BAIRRO
Where COD_CIDEST = :PRMcidest
}

{código usado na query com o parametro
Select *
From TAB_BAIRRO
Where COD_CIDEST = :PRMcidest
}

end;

end;
END;

[/CODE]

Como pode observar na tabela bairro não possuo um campo NomeCidade que seja varchar apenas chamo pelo cód_Cidest que é chave extrangeira.
O erro da na linha em negrito.
Seleciono a cidade (dblookupcidest) quando vou selecionar o dblookupbairro ele gera este erro:

[CODE=rich]

Could Not Convert variant of type (null) into type (integer)

[/CODE]

Acredito que ele deveria realizar o filtro no dblookupbairro com os bairros da cidade escolhida.

Aguardo sugestões. Obrigado.

Anexos

© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal