Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Automatizar seteo de parámetros para consultas (https://www.clubdelphi.com/foros/showthread.php?t=60719)

rochi 11-10-2008 06:07:55

Automatizar seteo de parámetros para consultas
 
Hola ya vi como hacer una búsqueda incremental, ahora bien, lo que quisiera es tener una ComboBox donde el usuario seleccione por cual parámetro quiere buscar. Que al seleccionar, arme la sentencia SQL con el nombre del parámetro y el valor.

Es decir, para presentar el parámetro al usuario, quiero que vea la palabra "Código cliente", pero el nombre del campos es Cod_Cli, y es con la que debo 'armar' la sentencia SQL o CommandText.

¿Cómo resuelven uds estas cosas?.

Saludos, ro

Lepe 11-10-2008 11:27:26

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 :D). 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 :D que sirven para construir sqls, te pueden ayudar un poco más.

Saludos

rochi 11-10-2008 18:37:29

Gracias por los ejemplos :), voy a estudiarlos es una opción interesante. El tema que me cuesta evitar son los "if", para identificar el tipo de los parámetros: integer, string, etc, como que no queda otra, creería.
Salvo que en diferentes componentes tenga los diferentes tipos de parámetros.

Buscando encontré el JVDBComboBox, a c/campo le asocia un string, entonces hago mas amigable la selección del parámetro al usuario, ve 'código' y no 'cod_cli'. Pero tampoco me salvo de los "ifs" porque puede haber enteros o strings.

Saludos, ro


La franja horaria es GMT +2. Ahora son las 08:47:59.

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