terça-feira, 28 de agosto de 2012

Busca Valor Em Todos Campos Tabela [Firebird]

Vai a dica para quem quer saber, quais campos tem determinado valor, é uma função onde você passa a Conexão(TSqlConnection), nome da Tabela se for passado * ele vai pesquisar em todas tabela mais o processo é mais lento, e o campo Busca que é o que ele vai pesquisar dentro do campo.


function BuscaValorEmTodosCamposTabela(conexao : TSQLConnection;
                             Tabela,Busca : String) : TStringList;

var
  Query : TSQLQuery;
  qryPesq : TSQLQuery;
begin
   Result  := TStringList.Create;
   Query   := TSQLQuery.Create(nil);
   qryPesq := TSQLQuery.Create(nil);

   Query.SQLConnection := conexao;
   qryPesq.SQLConnection := conexao;

   Query.SQL.Add('Select R.Rdb$Relation_Name, R.Rdb$Field_Name');
   Query.SQL.Add('from rdb$Relation_Fields R, RDB$FIELDS F');
   Query.SQL.Add('where F.rdb$field_name=R.Rdb$field_source');
// AQUI SE VC PREFERIR VC PODE COLOCAR O NOME DA TABELA PARA IR
//  MAIS RAPIDO
// SE FOR * ELE PESQUISA EM TODAS AS TABELA DO BANCO
    if Tabela <> '*' then 
     Query.SQL.Add('and R.Rdb$Relation_Name = '+QuotedStr(Tabela));
   Query.SQL.Add('order by R.rdb$field_position, R.rdb$field_name');
   Query.Open;
   while not Query.Eof do
   begin
      qryPesq.Close;
      qryPesq.SQL.Clear;
      qryPesq.SQL.Add('select first 1 '+Query.Fields[1].AsString+
                               ' from '+Query.Fields[0].AsString);
      qryPesq.SQL.Add('where '+Query.Fields[1].AsString+' like '+
                               QuotedStr('%'+Busca));
      qryPesq.Open;
      if not qryPesq.IsEmpty then
         Result.Add('Tabela: '+Query.Fields[0].AsString+' campo: '+
                      Query.Fields[1].AsString);
      Query.Next;
   end;

   Query.Close;
   qryPesq.Close;
   FreeAndNil(Query);
   FreeAndNil(qryPesq);
end;



Como ela retorna uma String List você pode colocar um Memo
para receber esse valor




procedure TForm1.Button1Click(Sender: TObject);
begin
   Memo1.Lines.AddStrings(BuscaValorEmTodosCamposTabela(SQLConnection1,
         'CLIENTE','RAFAEL'));
end;

Nenhum comentário:

Postar um comentário