Hay dos formas:
- Ponerle en el combo el mismo nombre que tiene el campo, y otro listbox con los simbolos ">", "<", "="; después de eso un TEdit donde el usuario pondrá la cadena de búsqueda. Esos 3 controles se pueden crear tantas veces como el usuario quiera para marcar varios criterios de búsqueda a la vez (usando frames, por ejemplo).
- Hacer la interfaz más bonita, poniendo un grid pequeñito que muestre el código de cliente y el nombre; el usuario marcará el que quiera. Para las demás opciones de búsqueda, puedes usar RadioButtons, checkboxes etc
La última vez que hice algo así, ricé el rizo. Mediante la JVCL, creé un menú calcado a la pantalla de búsqueda de windows XP (sin el muñeco del perrito
). Potente y bonito.
El primer caso no resulta muy atractivo para el usuario final, (tampoco cómodo); el segundo caso, es más atractivo, pero tardarás más en hacerlo.
En cuanto a armar el SQL, yo parto en varias funciones el sql, (aunque el ejemplo es sencillo, en la realidad se complica bastante, y una sola rutina es enorme, con un montón de variables, lo prefiero así:
Código Delphi
[-]
const campos = 'select campo1, campo2 campo3 from tabla ';
var TheSql :String;
where :string;
begin
TheSql := campos + periodoFechas + Cliente + Pagado ;
end;
function Cliente :string;
begin
Result := ' cliente = ' inttostr(dbgrid.columns[0].Fieldbyname('cod_cli').asstring;
end;
function Pagado:string
begin
if chkPagado.checked then
result := ' and pagado = 1';
else
Result := '';
end;
Periodofechas obliga a elegir entre dos fechas (datetimepickers) así siempre me aseguro que tiene una condición en el where y las demás opciones que vienen por detrás, no darán error de sintaxis, como cliente y/o pagado, siempre incluyen el 'and' que une las cláusulas.
Hay
algunos componentes de terceros
que sirven para construir sqls, te pueden ayudar un poco más.
Saludos