Exemplo de Pesquisa:
procedure TFEdtCadastro.btnProcurarClick(Sender: TObject );
var IPessoa_ID, iCCMenor, iCCMaior: integer;
SlqFiltra:Boolean ;
begin
// Faço um Range para fazer fetch de apenas
// um registo para a Horta e para AH;
// para cá trago todos mas posso trazer tb apenas 1.
(* ***
São carregada duas variaveis Ci e CF logo a seguir a validar
*** o user e estão visiveis todo o programa
*** *)
// MainForm.cCustosI ; MainForm.cCustosF ;
iCCMenor := StrToIntDef(IbRtvCfg(36),0) ;
iCCMaior := StrToIntDef(IbRtvCfg(37),0) ;
SlqFiltra:=(MainForm.cCustosF>=iCCMenor) OR (MainForm.cCustosF<=iCCMaior);
if (MainForm.cCustosF=9999999) then // Administrador vê tudo
SlqFiltra:=False;
//’ Select * From Pessoas ‘;
If SlqFiltra Then
FSelect:=’ Select * From Pessoas P ‘+
‘ LEFT OUTER JOIN DISTRITO_CCUSTO CC ON CC.SOCIOS_ID=P.PESSOA_ID ‘
Else
FSelect:=’ Select * From Pessoas P ‘;
If Localizar(IPessoa_ID) then
begin
//Sec. Geral Não Há Filtro==Rede Local
If SlqFiltra Then
FWhere := ‘ P.PESSOA_ID = ‘ + IntToStr(IPessoa_ID) + ‘ ‘ +
‘ AND CC.C_CUSTOS BETWEEN ‘+IntToStr(MainForm.cCustosI)+’ AND ‘+
IntToStr(MainForm.cCustosF)
Else
FWhere := ‘ P.PESSOA_ID = ‘ + IntToStr(IPessoa_ID) ;
AbrirDataSet;
end;
end;
====================
eX:TABELA DISTRITO RELACIONA-SE COM TODOS OS cc
====================
DD DESIG C_CUSTOS
1 Aveiro 9 999
2 Beja 9 999
3 Braga 9 999
4 Bragança 9 999
5 Castelo Branco 9 999
6 Coimbra 9 999
7 Évora 9 999
8 Faro 9 999
9 Guarda 9 999
10 Leiria 9 999
11 Lisboa 9 999
12 Portalegre 9 999
13 Porto 9 999
14 Santarém 9 999
15 Setúbal 9 999
16 Viana do Castelo 9 999
17 Vila Real 9 999
18 Viseu 9 999
31 Ilha da Madeira 3 100
32 Ilha de Porto Santo 3 100
41 Ilha de Santa Maria 4 100
42 Ilha de Sao Miguel 4 100
43 Ilha Terceira 4 300
44 Ilha da Graciosa 4 300
45 Ilha de Sao Jorge 4 300
46 Ilha do Pico 4 600
47 Ilha do Faial 4 600
48 Ilha das Flores 4 600
49 Ilha do Corvo 4 600
99 Angola 9 999
98 Moçambique 9 999
97 Brasil 9 999
96 Estados Unidos America 9 999
95 Canadá 9 999
94 Bermudas 9 999
93 Alemanha 9 999
92 França 9 999
91 Espanha 9 999
90 Macau 9 999
89 Cabo Verde 9 999
88 Ucrânia 9 999
====================
c/ESTA VISTA ESTABELEÇO AS RELAÇOES TODAS EXISTENTE
====================
CREATE VIEW DISTRITO_CCUSTO(
CLIENTE_ID,
NOCLI_ID_ID,
CC,
DD,
DESIG,
C_CUSTOS)
AS
SELECT C.CLIENTE_ID, C.NOCLI_ID, M.CC , D.DD, D.DESIG, D.C_CUSTOS FROM CLIENTES S
INNER JOIN MORADAS M ON M.MORADA_ID=C.CLIENTE_ID
INNER JOIN DISTRITO D ON D.DD=M.DD
INNER JOIN CONCELHO C ON C.DD=D.DD AND (C.DD=M.DD AND C.CC=M.CC)
WHERE M.TPMORA=1;
Eu comecei por falr no CEP mas o CEP é apenas para alimentar os Distritos e por ai adiante porque a tabela de Codigos postais ofial é publica e tem essa informação (distritos e Conclehos) associada ao códigos postais. Então seleccionamos o Codigo Postal e ele traz a restante infomração DD=Distrito e CC=Concelho.
Não sei em que mais te possa ajudar está praticamente tudo dito.
Abraço. Vou dormir
E, POR AQUI É TUDO VALIDADO O LIMITE É O CÉU