[firebase-br] Alterar "linha" do SQL

eduardo eduardo em icontroller.com.br
Sáb Mar 5 07:59:34 -03 2005


Oi Sávio

Eu faria desta forma:
var Select, Par1, Par2:String;
begin
      Select := ' select p.codigo, p.preco, g.id_grupo'+
                ' from tbproduto p'+
                ' inner join tbgrupo g on(g.id_grupo = p.id_grupo)+
                ' where p.<Campo> LIKE ''<campodebusca)>''';
      if ... Minha Lógica
        begin
             Par1 := X;
             Par2 := y;
        end;
      Select := StrReplace(Select, '<Campo>', Par1, [locaseInsensitive]);
      Select := StrReplace(Select, '<CampodeBusca>', Par1, 
[locaseInsensitive]);
      SqlQuery.Sql.Text := Select;
end;

Dá para fazer uma rotina genérica que substitua parâmetros se vc 
utilizar uma regra de nomenclatura. Ex

Query SELECT CAMPO FROM TABELA WHERE CHAVE=@P0 AND SUBCHAVE=@P1
Params ['1234', '69']
function ReplaceParams(const Query:String;Pars:Array of String):String;
var i:integer;
begin
	Result := Query;
        for i := High(Pars) downto 0 do
            Result := StrReplace(Result, '@P'+IntToStr(i), Pars[i], 
[locaseinsensitive]);
end;

Espero ter ajudado

[] Eduardo

savio_assuncao em ibest.com.br wrote:
> ola, pessoal 
> 
>   Um Companheiro , tempos atras em deu uma dica de como trocar  uma linha 
>   da consulta SQL a partir de um comando enviado
>   Por exemplo :
> 
>   select p.codigo,
>            p.preco
>            g.id_grupo
>    from tbproduto p
>    inner join tbgrupo g on(g.id_grupo = p.id_grupo)
> 
>    ai.. conforme o omando recebido contruo a clausula where
> 
>    if  comando = f10
>        coluna:=' REFERENCIA' 
>        sql.add('where p.'+Campo+'LIKE ' +  quotestr(campodebusca));
>      else
>        coluna:=' DESCRICAO' 
>        sql.add('where p.'+Campo+'LIKE ' +  quotestr(campodebusca));
>    endif     
>   
>    Como estou usando um sql.add  do componente TSQLQuery do IBExpress
>     na segunda execucao , gera uma erro, claro ficam duas clausulas where :(
> 
>    Queria substrituir  a linha do Consulta 
>    if  comando = f10
>        coluna:=' REFERENCIA' 
>        sql.[6]:=('where p.'+Campo+'LIKE ' +  quotestr(campodebusca));
>      else
>        coluna:=' DESCRICAO' 
>        sql.[6]:=('where p.'+Campo+'LIKE ' +  quotestr(campodebusca));
>    endif     
> 
>    E possivel né ....hehe
> 
>    [ ]'s
>    Savio Assuncao
>    D6 + IbExpress + FB1.0
> 
> 
> 
> Conheça o novo iBest Acelerado e aumente a velocidade da sua navegação em até 5 vezes. O primeiro mês é gratuito. Basta acessar o endereço http://www.ibest.com.br/acelerado para se cadastrar.
> 
> 
> 
> ------------------------------------------------------------------------
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br





Mais detalhes sobre a lista de discussão lista