Re: [delphi-br] Select Complexo e Complicado

2006-08-23 Por tôpico Jean
Faça um IF e adicione a pesquisa por profissão somente se vc informar algum 
codigo na consulta

if ed_cd_profissao  '' then
  sql.add(' and campo ' + ed_cd_profissao.text)
e pra fechar:
sql.add(' order by )

Entenda que para isto funcionar voce nao vai poder passar como parametro e sim 
atraves do ADD

bye
Jean


- Original Message - 
  From: Jeferson Adoryan 
  To: delphi-br@yahoogrupos.com.br 
  Sent: Tuesday, August 22, 2006 5:52 PM
  Subject: [delphi-br] Select Complexo e Complicado


  Boa tarde pessoal
  Estou fazendo um select onde eu trago os dados do contribuinte (para alguns 
dados tenho tabelas auxiliares, como profissao, bairro, cidade, rua). Nesse 
select, eu posso localizar por profissao, rua, bairro, cidade, cep, 
estado_civil, aposentado e sexo, posso ter todas as opcoes, algumas ou apenas 
uma.
  Segue abaixo um exemplo que esta quase funcionando, o problema eh quando os 
campos chave estrangeira na tabela contribuinte sao NULL. Quando o usuario nao 
seleciona profissao por exemplo, passo '%' como parametro.

  select c.CD_CLIENTE, c.NOME, c.NUMERO, c.ESTADO, c.CEP, c.DATA_NASCIMENTO, 
c.TELEFONE1, c.TELEFONE2, c.E_MAIL1, c.E_MAIL2, c.ESTADO_CIVIL, c.APOSENTADO, 
p.DESCRICAO, cd.CIDADE, b.BAIRRO, r.RUA, 
  CASE
WHEN c.SEXO = 'M' then 'Masculino'
else 'Feminino'
end as SEXO,
  CASE
WHEN c.APOSENTADO = 'S' then 'Sim'
else 'Não'
end as APOSENTADO 
  from 
 GCCADASTRO c, GCPROFISSAO p, GCCIDADE cd, GCBAIRRO b, GCRUA r 
  where 
(p.DESCRICAO like (:profissao))
  and (c.PROFISSAO = p.CD_CONTROLE)
  and (c.CIDADE = cd.CD_CIDADE)
  and (c.BAIRRO = b.CD_BAIRRO)
  and (c.RUA = r.CD_RUA)
  and (upper(b.BAIRRO) like upper(:bairro))
  and (upper(cd.CIDADE) like upper(:cidade))
  and (upper(r.RUA) like upper(:rua))
  and (upper(c.CEP) like upper(:cep))
  and (c.SEXO like :sexo)
  and (upper(c.ESTADO_CIVIL) like upper(:estcivil))
  and (c.APOSENTADO like :apos)
  order by c.NOME

  como eu poderia melhorar esse select??

  Obrigado a todos


  ___
  Jeferson Adoryan
  Técnico em Desenvolvimento de Software
  Objetiva Informática LTDA
  Fone: (55) 3375 3828
  Celular: (55) 8115 4544
  Linux Counter #404063
  Home Page: http://adoryan.byethost24.com
  =
  www.softtotal.com.br
  www.firehost.com.br

  Panambi - RS
  
  -
  Yahoo! Search
  Música para ver e ouvir: You're Beautiful, do James Blunt

  [As partes desta mensagem que não continham texto foram removidas]

   


--


  Internal Virus Database is out-of-date.
  Checked by AVG Free Edition.
  Version: 7.1.405 / Virus Database: 268.10.8/415 - Release Date: 09/08/06


[As partes desta mensagem que não continham texto foram removidas]



-- 
 FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM 

* Para ver as mensagens antigas, acesse:
http://br.groups.yahoo.com/group/delphi-br/messages

* Para falar com o moderador, envie um e-mail para:
[EMAIL PROTECTED]
 
Links do Yahoo! Grupos

* Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/delphi-br/

* Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]

* O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html

 




Re: [delphi-br] Select Complexo e Complicado

2006-08-23 Por tôpico Jeferson Adoryan
Valeu, vou testar essa ideia e a do Danilo, depois posto os resultados.

Jean [EMAIL PROTECTED] escreveu:Faça um IF e adicione a pesquisa por 
profissão somente se vc informar algum codigo na consulta
 
 if ed_cd_profissao  '' then
   sql.add(' and campo ' + ed_cd_profissao.text)
 e pra fechar:
 sql.add(' order by )
 
 Entenda que para isto funcionar voce nao vai poder passar como parametro e sim 
atraves do ADD
 
 bye
 Jean
 
 
 - Original Message - 
   From: Jeferson Adoryan 
   To: delphi-br@yahoogrupos.com.br 
   Sent: Tuesday, August 22, 2006 5:52 PM
   Subject: [delphi-br] Select Complexo e Complicado
 
 
   Boa tarde pessoal
   Estou fazendo um select onde eu trago os dados do contribuinte (para alguns 
dados tenho tabelas auxiliares, como profissao, bairro, cidade, rua). Nesse 
select, eu posso localizar por profissao, rua, bairro, cidade, cep, 
estado_civil, aposentado e sexo, posso ter todas as opcoes, algumas ou apenas 
uma.
   Segue abaixo um exemplo que esta quase funcionando, o problema eh quando os 
campos chave estrangeira na tabela contribuinte sao NULL. Quando o usuario nao 
seleciona profissao por exemplo, passo '%' como parametro.
 
   select c.CD_CLIENTE, c.NOME, c.NUMERO, c.ESTADO, c.CEP, c.DATA_NASCIMENTO, 
c.TELEFONE1, c.TELEFONE2, c.E_MAIL1, c.E_MAIL2, c.ESTADO_CIVIL, c.APOSENTADO, 
p.DESCRICAO, cd.CIDADE, b.BAIRRO, r.RUA, 
   CASE
 WHEN c.SEXO = 'M' then 'Masculino'
 else 'Feminino'
 end as SEXO,
   CASE
 WHEN c.APOSENTADO = 'S' then 'Sim'
 else 'Não'
 end as APOSENTADO 
   from 
  GCCADASTRO c, GCPROFISSAO p, GCCIDADE cd, GCBAIRRO b, GCRUA r 
   where 
 (p.DESCRICAO like (:profissao))
   and (c.PROFISSAO = p.CD_CONTROLE)
   and (c.CIDADE = cd.CD_CIDADE)
   and (c.BAIRRO = b.CD_BAIRRO)
   and (c.RUA = r.CD_RUA)
   and (upper(b.BAIRRO) like upper(:bairro))
   and (upper(cd.CIDADE) like upper(:cidade))
   and (upper(r.RUA) like upper(:rua))
   and (upper(c.CEP) like upper(:cep))
   and (c.SEXO like :sexo)
   and (upper(c.ESTADO_CIVIL) like upper(:estcivil))
   and (c.APOSENTADO like :apos)
   order by c.NOME
 
   como eu poderia melhorar esse select??
 
   Obrigado a todos
 
 
   ___
   Jeferson Adoryan
   Técnico em Desenvolvimento de Software
   Objetiva Informática LTDA
   Fone: (55) 3375 3828
   Celular: (55) 8115 4544
   Linux Counter #404063
   Home Page: http://adoryan.byethost24.com
   =
   www.softtotal.com.br
   www.firehost.com.br
 
   Panambi - RS
   
   -
   Yahoo! Search
   Música para ver e ouvir: You're Beautiful, do James Blunt
 
   [As partes desta mensagem que não continham texto foram removidas]
 

 
 
 --
 
 
   Internal Virus Database is out-of-date.
   Checked by AVG Free Edition.
   Version: 7.1.405 / Virus Database: 268.10.8/415 - Release Date: 09/08/06
 
 
 [As partes desta mensagem que não continham texto foram removidas]
 
   


___
Jeferson Adoryan
Técnico em Desenvolvimento de Software
Objetiva Informática LTDA
Fone: (55) 3375 3828
Celular: (55) 8115 4544
Linux Counter #404063
Home Page: http://adoryan.byethost24.com
=
www.softtotal.com.br
www.firehost.com.br

Panambi - RS

-
 Você quer respostas para suas perguntas? Ou você sabe muito e quer 
compartilhar seu conhecimento? Experimente o Yahoo! Respostas!

[As partes desta mensagem que não continham texto foram removidas]



-- 
 FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM 

* Para ver as mensagens antigas, acesse:
http://br.groups.yahoo.com/group/delphi-br/messages

* Para falar com o moderador, envie um e-mail para:
[EMAIL PROTECTED]
 
Links do Yahoo! Grupos

* Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/delphi-br/

* Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]

* O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html

 




Re: [delphi-br] Select Complexo e Complicado

2006-08-23 Por tôpico Jeferson Adoryan
O banco é Firebird 1.5.3
Bom, vou testar as dicas que me passou. Vou tentar tambem fazer o select 
dinamico de acordo com a escolha. Depois posto o resultado

Assim, o campo sexo e aposentado sempre tem algum valor, o maior problema é com 
profissao.

Valeu

Danilo Rogério [EMAIL PROTECTED] escreveu:Jeferson, ajudaria muito se 
você dissesse:
 1 -  qual banco está utilizando, pois existem comandos específicos que 
poderiam ajudar
 ... Mas vamos lá.
 
 1º Passo: A grosso modo, sugiro você montar seu select em tempo de execução, 
se for possível, pois vc eliminaria esses likes desnecessários.
 
 2º Passo: Em relação aos campos SEXO, APOSENTADO. Eles só aceitam M ou F, e S 
ou N, respectivamente, certo?
 Então, vc poderia substituí-los por:
   and (c.SEXO = COALESCE(:SexoPessoa,c.Sexo)) // Firebird
 
 ou entao
 
   and (c.SEXO = DECODE(:SexoPessoa,Null,C.Sexo,:SexoPessoa)) // Oracle
  
 Neste caso, vc esta dizendo que se o Parametro(:SexoPessoa) for igual a nulo, 
vc ira comparar C.Sexo = C.Sexo, trazendo todos os registros... Faça isso com o 
campo Aposentado também.
 
 3º Passo: Para os campos de Like faça assim:
 
   and (upper(b.BAIRRO) like (coalesce(:bairro,upper(b.bairro))) //Firebird
   and (upper(b.BAIRRO) like (decode(:bairro,null,b.bairro,:bairro)) // Oracle
 
 Qual é a ideia neste segundo passo: se o usuário NÃO informar o bairro(ou 
seja, nulo), ficara assim: and (upper(b.bairro) like upper(b.bairro). Novamente 
comparando o campo com ele mesmo. Agora, caso ele informe vc concatena o % no 
final do seu parâmetro.
 Jeferson, veja se essas dicas vão melhorar sua performance, e poste a 
resposta, pois muita gente tem esse tipo de problema, e com certeza, fica uma 
solução prática(caso a performance seja satisfatória).
 
 No mais, boa sorte, e aguardamos resposta...
 Danilo Rogério
 
 
 
 Jeferson Adoryan [EMAIL PROTECTED] escreveu:Boa tarde pessoal
  Estou fazendo um select onde eu trago os dados do contribuinte (para alguns 
dados tenho tabelas auxiliares, como profissao, bairro, cidade, rua). Nesse 
select, eu posso localizar por profissao, rua, bairro, cidade, cep, 
estado_civil, aposentado e sexo, posso ter todas as opcoes, algumas ou apenas 
uma.
  Segue abaixo um exemplo que esta quase funcionando, o problema eh quando os 
campos chave estrangeira na tabela contribuinte sao NULL. Quando o usuario nao 
seleciona profissao por exemplo, passo '%' como parametro.
  
  select c.CD_CLIENTE, c.NOME, c.NUMERO, c.ESTADO, c.CEP, c.DATA_NASCIMENTO, 
c.TELEFONE1, c.TELEFONE2, c.E_MAIL1, c.E_MAIL2, c.ESTADO_CIVIL, c.APOSENTADO, 
p.DESCRICAO, cd.CIDADE, b.BAIRRO, r.RUA, 
  CASE
WHEN c.SEXO = 'M' then 'Masculino'
else 'Feminino'
end as SEXO,
  CASE
WHEN c.APOSENTADO = 'S' then 'Sim'
else 'Não'
end as APOSENTADO 
  from 
 GCCADASTRO c, GCPROFISSAO p, GCCIDADE cd, GCBAIRRO b, GCRUA r 
  where 
(p.DESCRICAO like (:profissao))
   and (c.PROFISSAO = p.CD_CONTROLE)
   and (c.CIDADE = cd.CD_CIDADE)
   and (c.BAIRRO = b.CD_BAIRRO)
   and (c.RUA = r.CD_RUA)
   and (upper(b.BAIRRO) like upper(:bairro))
   and (upper(cd.CIDADE) like upper(:cidade))
   and (upper(r.RUA) like upper(:rua))
   and (upper(c.CEP) like upper(:cep))
   and (c.SEXO like :sexo)
   and (upper(c.ESTADO_CIVIL) like upper(:estcivil))
   and (c.APOSENTADO like :apos)
   order by c.NOME
  
  como eu poderia melhorar esse select??
  
  Obrigado a todos
  
  
  ___
  Jeferson Adoryan
  Técnico em Desenvolvimento de Software
  Objetiva Informática LTDA
  Fone: (55) 3375 3828
  Celular: (55) 8115 4544
  Linux Counter #404063
  Home Page: http://adoryan.byethost24.com
  =
  www.softtotal.com.br
  www.firehost.com.br
  
  Panambi - RS
   
  -
   Yahoo! Search
   Música para ver e ouvir: You're Beautiful, do James Blunt
  
  [As partes desta mensagem que não continham texto foram removidas]
  

 
  
 -
  Yahoo! Search
  Música para ver e ouvir: You're Beautiful, do James Blunt
 
 [As partes desta mensagem que não continham texto foram removidas]
 
   


___
Jeferson Adoryan
Técnico em Desenvolvimento de Software
Objetiva Informática LTDA
Fone: (55) 3375 3828
Celular: (55) 8115 4544
Linux Counter #404063
Home Page: http://adoryan.byethost24.com
=
www.softtotal.com.br
www.firehost.com.br

Panambi - RS

-
 Novidade no Yahoo! Mail: receba alertas de novas mensagens no seu celular. 
Registre seu aparelho agora!

[As partes desta mensagem que não continham texto foram removidas]



-- 
 FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM 

* Para ver as mensagens antigas, acesse:
http://br.groups.yahoo.com/group/delphi-br/messages

* Para falar com o moderador, envie um e-mail para:
[EMAIL PROTECTED]
 
Links do Yahoo! Grupos

* Para 

Re: [delphi-br] Select Complexo e Complicado

2006-08-23 Por tôpico Jeferson Adoryan
Bom pessoal, primeiro agradeco pelas dicas passadas. Estou colocando a solucao 
que cheguei para o meu problema.

Usei um sql dinamico, onde eu ia adicionando os wheres...

ficou mais ou menos assim...

comando := 'select c.CD_CLIENTE, c.NOME, c.NUMERO, c.ESTADO, c.CEP, 
c.DATA_NASCIMENTO, '+
'c.TELEFONE1, c.TELEFONE2, c.E_MAIL1, c.E_MAIL2, 
c.ESTADO_CIVIL, c.APOSENTADO, '+
'(select p.DESCRICAO from gcprofissao p where p.cd_controle = 
c.profissao) as prof, '+
'(select cd.CIDADE from gccidade cd where cd.cd_cidade = 
c.cidade) as cidade, '+
'(select b.BAIRRO from gcbairro b where b.cd_bairro = c.bairro) 
as bairro, '+
'(select r.rua from gcrua r where r.cd_rua = c.rua) as rua, '+
'CASE '+
'  WHEN c.SEXO = ''M'' then ''Masculino'' '+
'  else ''Feminino'' '+
'  end as SEXO, '+
'CASE '+
'  WHEN c.APOSENTADO = ''S'' then ''Sim'' '+
'  else ''Não'' '+
'  end as APOSENTADO '+
'from GCCADASTRO c ';

Depois eu fui testando as escolhas do usuario e adicionando as condicoes...

if CbxProfissao.ItemIndex  0 then
begin
  comando2 := comando2 +  '(c.profissao = (select p1.cd_controle from 
gcprofissao p1 where p1.descricao like ('''+ CbxProfissao.Text +''')))';
  //proximo comando precisa de and
  coloca_and := true;
end;
//verifica rua
if CmbxRua.ItemIndex  0 then
begin
  if coloca_and then
comando2 := comando2 + ' and ';
  comando2 := comando2 +  '(c.rua = (select r1.cd_rua from gcrua r1 where 
r1.rua like ('''+ CmbxRua.Text +''')))';
  //proximo comando precisa de and
  coloca_and := true;
end;

e assim por diante...
Funcionou numa boa, e acessando por rede em um banco com mais de 50.000 reg 
fico satisfarotio...

Jeferson Adoryan [EMAIL PROTECTED] escreveu:O banco é Firebird 1.5.3
 Bom, vou testar as dicas que me passou. Vou tentar tambem fazer o select 
dinamico de acordo com a escolha. Depois posto o resultado
 
 Assim, o campo sexo e aposentado sempre tem algum valor, o maior problema é 
com profissao.
 
 Valeu
 
 Danilo Rogério [EMAIL PROTECTED] escreveu:Jeferson, ajudaria muito se 
você dissesse:
  1 -  qual banco está utilizando, pois existem comandos específicos que 
poderiam ajudar
  ... Mas vamos lá.
  
  1º Passo: A grosso modo, sugiro você montar seu select em tempo de execução, 
se for possível, pois vc eliminaria esses likes desnecessários.
  
  2º Passo: Em relação aos campos SEXO, APOSENTADO. Eles só aceitam M ou F, e S 
ou N, respectivamente, certo?
  Então, vc poderia substituí-los por:
and (c.SEXO = COALESCE(:SexoPessoa,c.Sexo)) // Firebird
  
  ou entao
  
and (c.SEXO = DECODE(:SexoPessoa,Null,C.Sexo,:SexoPessoa)) // Oracle
   
  Neste caso, vc esta dizendo que se o Parametro(:SexoPessoa) for igual a nulo, 
vc ira comparar C.Sexo = C.Sexo, trazendo todos os registros... Faça isso com o 
campo Aposentado também.
  
  3º Passo: Para os campos de Like faça assim:
  
and (upper(b.BAIRRO) like (coalesce(:bairro,upper(b.bairro))) //Firebird
and (upper(b.BAIRRO) like (decode(:bairro,null,b.bairro,:bairro)) // Oracle
  
  Qual é a ideia neste segundo passo: se o usuário NÃO informar o bairro(ou 
seja, nulo), ficara assim: and (upper(b.bairro) like upper(b.bairro). Novamente 
comparando o campo com ele mesmo. Agora, caso ele informe vc concatena o % no 
final do seu parâmetro.
  Jeferson, veja se essas dicas vão melhorar sua performance, e poste a 
resposta, pois muita gente tem esse tipo de problema, e com certeza, fica uma 
solução prática(caso a performance seja satisfatória).
  
  No mais, boa sorte, e aguardamos resposta...
  Danilo Rogério
  
  
  
  Jeferson Adoryan [EMAIL PROTECTED] escreveu:Boa tarde pessoal
   Estou fazendo um select onde eu trago os dados do contribuinte (para alguns 
dados tenho tabelas auxiliares, como profissao, bairro, cidade, rua). Nesse 
select, eu posso localizar por profissao, rua, bairro, cidade, cep, 
estado_civil, aposentado e sexo, posso ter todas as opcoes, algumas ou apenas 
uma.
   Segue abaixo um exemplo que esta quase funcionando, o problema eh quando os 
campos chave estrangeira na tabela contribuinte sao NULL. Quando o usuario nao 
seleciona profissao por exemplo, passo '%' como parametro.
   
   select c.CD_CLIENTE, c.NOME, c.NUMERO, c.ESTADO, c.CEP, c.DATA_NASCIMENTO, 
c.TELEFONE1, c.TELEFONE2, c.E_MAIL1, c.E_MAIL2, c.ESTADO_CIVIL, c.APOSENTADO, 
p.DESCRICAO, cd.CIDADE, b.BAIRRO, r.RUA, 
   CASE
 WHEN c.SEXO = 'M' then 'Masculino'
 else 'Feminino'
 end as SEXO,
   CASE
 WHEN c.APOSENTADO = 'S' then 'Sim'
 else 'Não'
 end as APOSENTADO 
   from 
  GCCADASTRO c, GCPROFISSAO p, GCCIDADE cd, GCBAIRRO b, GCRUA r 
   where 
 (p.DESCRICAO like (:profissao))
and (c.PROFISSAO = p.CD_CONTROLE)
and (c.CIDADE = 

[delphi-br] Select Complexo e Complicado

2006-08-22 Por tôpico Jeferson Adoryan
Boa tarde pessoal
Estou fazendo um select onde eu trago os dados do contribuinte (para alguns 
dados tenho tabelas auxiliares, como profissao, bairro, cidade, rua). Nesse 
select, eu posso localizar por profissao, rua, bairro, cidade, cep, 
estado_civil, aposentado e sexo, posso ter todas as opcoes, algumas ou apenas 
uma.
Segue abaixo um exemplo que esta quase funcionando, o problema eh quando os 
campos chave estrangeira na tabela contribuinte sao NULL. Quando o usuario nao 
seleciona profissao por exemplo, passo '%' como parametro.

select c.CD_CLIENTE, c.NOME, c.NUMERO, c.ESTADO, c.CEP, c.DATA_NASCIMENTO, 
c.TELEFONE1, c.TELEFONE2, c.E_MAIL1, c.E_MAIL2, c.ESTADO_CIVIL, c.APOSENTADO, 
p.DESCRICAO, cd.CIDADE, b.BAIRRO, r.RUA, 
CASE
  WHEN c.SEXO = 'M' then 'Masculino'
  else 'Feminino'
  end as SEXO,
CASE
  WHEN c.APOSENTADO = 'S' then 'Sim'
  else 'Não'
  end as APOSENTADO 
from 
   GCCADASTRO c, GCPROFISSAO p, GCCIDADE cd, GCBAIRRO b, GCRUA r 
where 
  (p.DESCRICAO like (:profissao))
 and (c.PROFISSAO = p.CD_CONTROLE)
 and (c.CIDADE = cd.CD_CIDADE)
 and (c.BAIRRO = b.CD_BAIRRO)
 and (c.RUA = r.CD_RUA)
 and (upper(b.BAIRRO) like upper(:bairro))
 and (upper(cd.CIDADE) like upper(:cidade))
 and (upper(r.RUA) like upper(:rua))
 and (upper(c.CEP) like upper(:cep))
 and (c.SEXO like :sexo)
 and (upper(c.ESTADO_CIVIL) like upper(:estcivil))
 and (c.APOSENTADO like :apos)
 order by c.NOME

como eu poderia melhorar esse select??

Obrigado a todos


___
Jeferson Adoryan
Técnico em Desenvolvimento de Software
Objetiva Informática LTDA
Fone: (55) 3375 3828
Celular: (55) 8115 4544
Linux Counter #404063
Home Page: http://adoryan.byethost24.com
=
www.softtotal.com.br
www.firehost.com.br

Panambi - RS

-
 Yahoo! Search
 Música para ver e ouvir: You're Beautiful, do James Blunt

[As partes desta mensagem que não continham texto foram removidas]



-- 
 FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM 

* Para ver as mensagens antigas, acesse:
http://br.groups.yahoo.com/group/delphi-br/messages

* Para falar com o moderador, envie um e-mail para:
[EMAIL PROTECTED]
 
Links do Yahoo! Grupos

* Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/delphi-br/

* Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]

* O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html

 




Re: [delphi-br] Select Complexo e Complicado

2006-08-22 Por tôpico Danilo Rogério
Jeferson, ajudaria muito se você dissesse:
1 -  qual banco está utilizando, pois existem comandos específicos que poderiam 
ajudar
... Mas vamos lá.

1º Passo: A grosso modo, sugiro você montar seu select em tempo de execução, se 
for possível, pois vc eliminaria esses likes desnecessários.

2º Passo: Em relação aos campos SEXO, APOSENTADO. Eles só aceitam M ou F, e S 
ou N, respectivamente, certo?
Então, vc poderia substituí-los por:
  and (c.SEXO = COALESCE(:SexoPessoa,c.Sexo)) // Firebird

ou entao

  and (c.SEXO = DECODE(:SexoPessoa,Null,C.Sexo,:SexoPessoa)) // Oracle
 
Neste caso, vc esta dizendo que se o Parametro(:SexoPessoa) for igual a nulo, 
vc ira comparar C.Sexo = C.Sexo, trazendo todos os registros... Faça isso com o 
campo Aposentado também.

3º Passo: Para os campos de Like faça assim:

  and (upper(b.BAIRRO) like (coalesce(:bairro,upper(b.bairro))) //Firebird
  and (upper(b.BAIRRO) like (decode(:bairro,null,b.bairro,:bairro)) // Oracle

Qual é a ideia neste segundo passo: se o usuário NÃO informar o bairro(ou seja, 
nulo), ficara assim: and (upper(b.bairro) like upper(b.bairro). Novamente 
comparando o campo com ele mesmo. Agora, caso ele informe vc concatena o % no 
final do seu parâmetro.
Jeferson, veja se essas dicas vão melhorar sua performance, e poste a resposta, 
pois muita gente tem esse tipo de problema, e com certeza, fica uma solução 
prática(caso a performance seja satisfatória).

No mais, boa sorte, e aguardamos resposta...
Danilo Rogério



Jeferson Adoryan [EMAIL PROTECTED] escreveu:Boa tarde pessoal
 Estou fazendo um select onde eu trago os dados do contribuinte (para alguns 
dados tenho tabelas auxiliares, como profissao, bairro, cidade, rua). Nesse 
select, eu posso localizar por profissao, rua, bairro, cidade, cep, 
estado_civil, aposentado e sexo, posso ter todas as opcoes, algumas ou apenas 
uma.
 Segue abaixo um exemplo que esta quase funcionando, o problema eh quando os 
campos chave estrangeira na tabela contribuinte sao NULL. Quando o usuario nao 
seleciona profissao por exemplo, passo '%' como parametro.
 
 select c.CD_CLIENTE, c.NOME, c.NUMERO, c.ESTADO, c.CEP, c.DATA_NASCIMENTO, 
c.TELEFONE1, c.TELEFONE2, c.E_MAIL1, c.E_MAIL2, c.ESTADO_CIVIL, c.APOSENTADO, 
p.DESCRICAO, cd.CIDADE, b.BAIRRO, r.RUA, 
 CASE
   WHEN c.SEXO = 'M' then 'Masculino'
   else 'Feminino'
   end as SEXO,
 CASE
   WHEN c.APOSENTADO = 'S' then 'Sim'
   else 'Não'
   end as APOSENTADO 
 from 
GCCADASTRO c, GCPROFISSAO p, GCCIDADE cd, GCBAIRRO b, GCRUA r 
 where 
   (p.DESCRICAO like (:profissao))
  and (c.PROFISSAO = p.CD_CONTROLE)
  and (c.CIDADE = cd.CD_CIDADE)
  and (c.BAIRRO = b.CD_BAIRRO)
  and (c.RUA = r.CD_RUA)
  and (upper(b.BAIRRO) like upper(:bairro))
  and (upper(cd.CIDADE) like upper(:cidade))
  and (upper(r.RUA) like upper(:rua))
  and (upper(c.CEP) like upper(:cep))
  and (c.SEXO like :sexo)
  and (upper(c.ESTADO_CIVIL) like upper(:estcivil))
  and (c.APOSENTADO like :apos)
  order by c.NOME
 
 como eu poderia melhorar esse select??
 
 Obrigado a todos
 
 
 ___
 Jeferson Adoryan
 Técnico em Desenvolvimento de Software
 Objetiva Informática LTDA
 Fone: (55) 3375 3828
 Celular: (55) 8115 4544
 Linux Counter #404063
 Home Page: http://adoryan.byethost24.com
 =
 www.softtotal.com.br
 www.firehost.com.br
 
 Panambi - RS
  
 -
  Yahoo! Search
  Música para ver e ouvir: You're Beautiful, do James Blunt
 
 [As partes desta mensagem que não continham texto foram removidas]
 
   


-
 Yahoo! Search
 Música para ver e ouvir: You're Beautiful, do James Blunt

[As partes desta mensagem que não continham texto foram removidas]



-- 
 FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM 

* Para ver as mensagens antigas, acesse:
http://br.groups.yahoo.com/group/delphi-br/messages

* Para falar com o moderador, envie um e-mail para:
[EMAIL PROTECTED]
 
Links do Yahoo! Grupos

* Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/delphi-br/

* Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]

* O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html