---------- 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