Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-12-2019
Gregorio Cíber Gregorio Cíber is offline
Miembro
 
Registrado: jun 2008
Posts: 98
Poder: 16
Gregorio Cíber Va por buen camino
Busqueda en la BD a partir de un texto tecleado

Hola amigos.
El siguiente código lo utilizo para seleccionar registros dentro de una tabla contenida en una TDBGrid y situarnos en la primera coincidencia.

Dos controles: edt_TablaBuscar (TEdit) y box_TablaBuscar (TComboBox). Este último con ITems = '','Empieza', 'Contiene', 'Termina'.

A medida que se escribe en edt_TablaBusca se ejecuta edt_TablaBuscarChange y si se cambia la propiedad Item de box_TablaBuscar se ejecuta box_TablaBuscarChage. La variable UltimoCampo contiene el campo por el que se busca. Se asigna a partir del TDBGrid cuando se pincha en titulo.

Código Delphi [-]
procedure edt_TablaBuscarChange(Sender: TObject);
var
  f : TDate;
  s : String;
begin
  inherited;

  s := edt_TablaBuscar.Text;

  try
    tbl_Tabla.Locate( UltimoCampo,
                      VarArrayOf([ UpperCase(s) ]),
                      [loCaseInsensitive, loPartialKey] );
    box_TablaBuscarChange(Sender);
  except
    try
      f := StrToDate(s); //StrToDate(edt_TablaBuscar.Text);
      tbl_Tabla.Locate( UltimoCampo,
                        f,
                        [loCaseInsensitive, loPartialKey] );
    except
      //
    end;
  end;
end;


procedure TfP__BaseAC_Tabla_B.box_TablaBuscarChange(Sender: TObject);
var
  s: string;
begin
  inherited;

  case box_TablaBuscar.ItemIndex of
    0: s := '';
    1: s := edt_TablaBuscar.Text + '%';
    2: s := '%' + edt_TablaBuscar.Text + '%';
    3: s := '%' + edt_TablaBuscar.Text;
  end;
  s := UpperCase(s);
  //
  if box_TablaBuscar.ItemIndex > 0 then
    s := '(' + UltimoCampo + ' IS NOT NULL) ' +
         'AND ' +
         '(UPPER (' + UltimoCampo + ') LIKE ''' + s + ''')';
  //
  try
    tbl_Tabla.Filter   := s;
    tbl_Tabla.Filtered := (box_TablaBuscar.ItemIndex > 0);
  except
    //tbl_Tabla.Filtered := False;
    //box_TablaBuscar.ItemIndex := 0;
  end;
  //
  ActiveControl := grd_Tabla;
end;

Hasta aqui todo bien. El código funciona y, aunque estoy pensado en algunas mejoras, no me ha dado problemas a lo largo del tiempo.

Sin embargo adolece de un defecto y es que la tabla debe estar cargada en memoria, lo cual es un proble cuando hay decenas o centenares de miles de registros. Y aquí va la pregunta, ¿cómo prodría hacerse algo parecido pero tirando de la BD directamente?. Es decir, pidiéndole a Firebird que devuelva las fihas que cumplan las condiciones indicadas en cada caso, teniendo en cuenta que debe valer para cualquier tabla y para cualquier campo de ella.

Gracias anticipadas.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Mostrar texto de un DBMemo a partir de un caracter exequielmatias1 Varios 6 21-08-2013 16:01:04
Crear Imagen A Partir De Texto (x,y,z) gusspagano Gráficos 17 23-10-2012 22:49:33
Busqueda de texto Gerson12 Varios 40 05-08-2012 20:55:43
Crear un Reporte a partir de archivos de texto franciscobucio Impresión 4 18-01-2007 18:49:09
Se puede optener un listado de direcciones a partir de una busqueda? Alfredo Internet 3 19-10-2005 16:10:31


La franja horaria es GMT +2. Ahora son las 17:49:51.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi