Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   TIBQuery multi busqueda (https://www.clubdelphi.com/foros/showthread.php?t=50265)

mjjj 13-11-2007 16:06:12

TIBQuery multi busqueda
 
Hola amigos... ojala me puedan echar una mano con este problemita...

En un TForm tengo: 1 TDBGrid, 2 TRadiobutton, 8 TCheckbox, 1 TQuery y un TButton.

El TQuery busca en la tabla Presupuesto. Se puede buscar en 2 empresas distintas (dependiendo de cual TRadiobutton este chequeado). Ademas se puede buscar en las distintas AREAS (dependiendo de cuales TCheckbox este chequeado)

El codigo que tengo es asi....

Código Delphi [-]
if RADIOBUTTON1.CHECKED = TRUE then EMPRESA:='REIFOX';
if RADIOBUTTON2.CHECKED = TRUE then EMPRESA:='CAINSA';
 
IBQUERY1.Close;
IBQUERY1.SQL.CLEAR;
IBQUERY1.SQL.ADD('SELECT SUBAREA, MONTO FROM PRESUPUESTO');
IBQUERY1.SQL.ADD('WHERE EMPRESA ='+QUOTEDSTR(EMPRESA));

if CHECKBOX1.CHECKED = TRUE then
IBQUERY1.SQL.ADD('AND AREA =QUOTEDSTR('EXISTENCIAS'));
if CHECKBOX2.CHECKED = TRUE then
IBQUERY1.SQL.ADD('OR AREA ='+QUOTEDSTR('PESQUERA'));
if CHECKBOX3.CHECKED = TRUE then
IBQUERY1.SQL.ADD('OR AREA ='+QUOTEDSTR('REVESTIMIENTO'));
if CHECKBOX4.CHECKED = TRUE then
IBQUERY1.SQL.ADD('OR AREA ='+QUOTEDSTR('BOMBA Y VALVULAS'));
if CHECKBOX5.CHECKED = TRUE then
IBQUERY1.SQL.ADD('OR AREA ='+QUOTEDSTR('SANITARIA'));
if CHECKBOX6.CHECKED = TRUE then
IBQUERY1.SQL.ADD('OR AREA ='+QUOTEDSTR('EXPLOTACION AREA SERVICIOS'));
if CHECKBOX7.CHECKED = TRUE then
IBQUERY1.SQL.ADD('OR AREA ='+QUOTEDSTR('APOYO PRODUCCION'));
if CHECKBOX8.CHECKED = TRUE then
IBQUERY1.SQL.ADD('OR AREA ='+QUOTEDSTR('ADMINISTRACION Y VENTAS'));

IBQUERY1.Open;

... funciona bien, el problema se me presenta cuando no tengo chequeado el checkbox1, porque ese es el que tiene la sentencias 'AND'...

Como puedo hacer para que me busque en las AREA que tengo chequeadas... alguien tiene alguna idea...

saludos... gracias

Caro 13-11-2007 17:11:49

Hola mjjj, lo que yo haria seria utilizar un CheckListBox, el AND lo pondría donde esta tu Where, tu codigo quedaria mas o menos asi.

Código Delphi [-]
var
  i,flg:Integer;
begin
 flg := 0;
 if RADIOBUTTON1.CHECKED = TRUE then EMPRESA:='REIFOX';
 if RADIOBUTTON2.CHECKED = TRUE then EMPRESA:='CAINSA';
 
 IBQUERY1.Close;
 IBQUERY1.SQL.CLEAR;
 IBQUERY1.SQL.ADD('SELECT SUBAREA, MONTO FROM PRESUPUESTO');
 IBQUERY1.SQL.ADD('WHERE EMPRESA ='+QUOTEDSTR(EMPRESA)+' AND ');

 for i:=0 to CheckListBox1.Items.Count-1 do
   begin
    if CheckListBox1.Checked[i]=true then     if flg=0 then //si es el primer item no añadimos el OR
     begin       QUERY1.SQL.ADD(' AREA ='+QUOTEDSTR(CheckListBox1.Items[i]));
      flg := 1;
     end
    else
     QUERY1.SQL.ADD(' OR AREA ='+QUOTEDSTR(CheckListBox1.Items[i]));  
  end;

  IBQUERY1.Open;

Estoy suponiendo que el texto de cada CheckBox seria el mismo al area a buscar.

Saluditos


La franja horaria es GMT +2. Ahora son las 03:30:35.

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