---------- Forwarded message ----------
From: Gabriel Filho <[EMAIL PROTECTED]>
Date: 18/01/2006 16:35
Subject: Função para gerar WHERE de busca com like
To: delphi-br@yahoogrupos.com.br

Olá pessoal....

    Recentemente tive acesso a uma rotina em asp que montava uma string sql
para busca, não sei que é o autor, mas a adaptei para delphi e a transformei
em uma funcão, segue abaixo a mesma para quem quiser usar:

function StrSQLBusca(Campos: array of string; Palavra:string):string;
var
  strSQL,strSearch,pStrSearch,DefaultBoolean,mySQL:string;
  tmpSQL: array of String;
  P,i:integer;
begin
pStrSearch     := Palavra;
if pStrSearch <> '' then
begin
  strSearch:=pStrSearch;
  DefaultBoolean := 'AND';
  // Faz a busca no banco de Dados
  //String principal
  SetLength(tmpSQL, Length(Campos));
  for i:=Low(Campos) to High(Campos) do
  begin
    tmpSQL[i]     := '('+Campos[i]+' LIKE ';
  end;
  P := 1;
  while P > 0 do
  begin
        P := Pos(' ',strSearch);
        if P = 0 Then
        begin
              //We have hit the end
              for i:=Low(Campos) to High(Campos) do
              begin
                tmpSQL[i]       := tmpSQL[i]  + QuotedStr('%'+strSearch+'%')
+')';
              end;
        end
        else
        begin
              for i:=Low(Campos) to High(Campos) do
              begin
                tmpSQL[i]         := tmpSQL[i]  +
QuotedStr('%'+copy(strSearch,1,P-1)+'%') + DefaultBoolean + ' '+Campos[i]+'
LIKE ';
              end;
        end;
              strSearch     := copy(strSearch,P+1,length(strSearch));
  end;
    for i:=Low(Campos) to High(Campos) do
    begin
      mySQL             := mySQL + tmpSQL[i];
      if i < High(Campos) then
        mySQL             := mySQL + ' OR '
    end;
    strSql := mySql+')';
  end;
    Result:=strSQL;
end;
******************************************************
Exemplo de uso:

    Campos[0]:='Operacao_TelUtil.Nome';
    Campos[1]:='Operacao_TelUtil.Contato';
    Campos[2]:='Operacao_TelUtil.Cidade';
    Campos[3]:='Operacao_TelUtil.Estado';
    Campos[4]:='Operacao_TelUtil.Tel1';
    Campos[5]:='Operacao_TelUtil.Tel2';
    Campos[6]:='Operacao_TelUtil.Radio';
    Campos[7]:='Operacao_TelUtil.Obs';
    Campos[8]:='Operacao_TelUtil._0800';
    Campos[9]:='Operacao_CatTelUtil.Categoria';


    if ADOQueryBusca.Active then ADOQueryBusca.Close;
    ADOQueryBusca.SQL.Text:='SELECT Operacao_TelUtil.Id_Categoria,
Operacao_TelUtil.Nome, Operacao_TelUtil.Contato, '+
    'Operacao_TelUtil.Cidade, Operacao_TelUtil.Estado,
Operacao_TelUtil.Tel1, Operacao_TelUtil.Tel2,'+
    ' Operacao_TelUtil.Radio, Operacao_TelUtil.Obs, Operacao_TelUtil._0800,
Operacao_CatTelUtil.Categoria'+
    ' FROM Operacao_TelUtil INNER JOIN Operacao_CatTelUtil ON
Operacao_TelUtil.Id_'+
    'Categoria = Operacao_CatTelUtil.Id_Categoria WHERE ('+
StrSQLBusca(Campos,EditBusca.Text);
    ADOQueryBusca.Open

*************************************************

Espero que seja util para vcs como é para mim


T+


[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

 



Responder a