Basicamente hay dos alternativas
1. Filtrar informacion: Esto lo podes hacer, por ejemplo:
a. Propiedad Filter del DataSet: En esta propiedad se especifica una cadena (string) con un predicado; la sintaxis es
similar a la que se usa en el lenguaje SQL, aunque mas limitada; el punto a favor es que cualquier descendiente de TDataSet soporta este metodo; los
puntos en contra son: poco flexible, y sobre todo, es algo lento
El uso es sencillo:
Código Delphi
[-]
ClientesDataSet.Filter := 'SaldoPendiente > 0';
ClientesDataSet.Filtered := True;
ClientesDataSet.Filtered := False;
Documentacion propiedad Filter
Revisa tambien
FilterOptions
b. Una forma "avanzada" de filtro es, en vez de una propiedad, se usa un
evento. Los TDataSet proveen el evento
OnFilterRecord, el cual tiene esta firma:
Código Delphi
[-]
TFilterRecordEvent = procedure(DataSet: TDataSet; var Accept: Boolean) of object;
Es decir, que cuando asignamos la propiedad Filtered a True, el DataSet ejecutara el evento
OnFilterRecord para cada registro. El programador debe realizar las evaluaciones que considere necesarias en este evento, y determinar el valor del parametro
Accept, notar que esta pasado por referencia (calificador
var)
Por ejemplo, si quisiera mostrar los clientes con codigo mayor a 30 y que no esten borrados:
Código Delphi
[-]procedure TForm1.ClientesDataSetFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
Accept := (DataSet.FieldByName('Codigo').AsInteger > 30) and not(DataSet.FieldByName('Borrado').AsBoolean);
end;
Documentacion
c. La tercer alternativa es usar componentes Query para realizar consultas a la base de datos; son muy flexibles y muy rapidas, y se deben escribir en lenguaje SQL. Por ejemplo, usando los componentes ADO
Código Delphi
[-]
var
qry: TADOQuery;
begin
qry := TADOQuery.Create(NIL);
qry.Connection := ComponenteADOConnection;
qry.SQL.Text := ' SELECT * FROM Clientes WHERE Nombre LIKE :Nombre '; qry.Parameters.ParamByName('Nombre').Value := 'Juan%'; qry.Open; end;
2. Luego esta el localizar informacion. Localizar informacion es, una ves tenes un DataSet con ciertos registros, realizar una busqueda sobre ese mismo DataSet, y posicionar como registro actual al que cumpla con los criterios de la busqueda
La forma mas comun y recomendada de hacerlo es usando el metodo
Locate, que esta definido en TDataSet
Código Delphi
[-]
AlgunDataSet.Locate('Categoria', 'INFORMATICA', []);
if AlgunDataSet.Locate('Categoria', 'INFORMATICA', []) then
ShowMessage('Registro encontrado')
else
ShowMessage('Registro NO encontrado');
Documentacion
Uso de Locate
Otras alternativas (mucho menos eficientes, pero mas flexibles que Locate) es hacer la busqueda "a mano", es decir, recorriendo el DataSet e implementando la logica necesaria:
Código Delphi
[-]
DataSet.DisableControls;
try
while not DataSet.Eof do
begin
if DataSet.FieldByName('Codigo').AsInteger = 5 then
Break;
DataSet.Next;
end;
finally
DataSet.EnableControls;
end;