Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Problemas con Consulta Sql en Una Búsqueda (https://www.clubdelphi.com/foros/showthread.php?t=77631)

hondaalberto 13-02-2012 21:09:21

Problemas con Consulta Sql en Una Búsqueda
 
Buenas tardes Amigos tengo un problema con el uso del procedimiento que mas abajo les presento, el problema consiste en que si el campo que el usuario selecciono para buscar esta vacio en la tabla porque este Campo permite valores nulos (Campo último número utilizado) en el Grid que estoy mostrando los datos de la consulta cuando limpio los datos en el edit no me muestra todos los registros que deberian mostrarse en el Grid de tres registros que habia en la tabla uno no se muestra despues de buscar por este campo vacio, despues con los que si estan llenos no pasa esto.

Me gustaria si es posible saber que tengo que modificarle para que no me suceda esto.

Utilizo una base de datos en Sql Server y un TRadioGroup para que el usuario seleccione el campo por el cual quiere realizar la busqueda.



Muchas GRacias de antemano por la ayuda que me puedan dar al respecto y por su valioso tiempo.




procedure TFBuscarNumerosdeSerie.EValorChange(Sender: TObject);
const
// Consulta Sql
STRSQL = 'Select * From Numeros_de_Serie';
STRORDER = 'ORDER BY Codigo';


begin
QDatos.Close;

// Está vacío
if (Evalor.Text = '') then begin
QDatos.SQL.Text := STRSQL;

end
else

If rgbuscarpor.ItemIndex = 0 then
begin
// montamos la sql
QDatos.SQL.Text := STRSQL + ' WHERE (Codigo) LIKE (' + QuotedStr('%' + Evalor.Text + '%') + ')' +
// Añadimos el WHER
// Añadimos el orden
STRORDER;
end;

If RGBuscarpor.ItemIndex = 1 then
begin
LValor.Caption:='Descripción';
// montamos la sql
QDatos.SQL.Text := STRSQL + ' WHERE (Descripcion) LIKE (' + QuotedStr('%' + Evalor.Text + '%') + ')' +
// Añadimos el WHER
// Añadimos el orden
STRORDER;
end;
If RGBuscarpor.ItemIndex = 2 then
begin
// montamos la sql
QDatos.SQL.Text := STRSQL + ' WHERE (Numero_Inicial) LIKE (' + QuotedStr('%' + Evalor.Text + '%') + ')' +
// Añadimos el WHER
// Añadimos el orden
STRORDER;
end;

If RGBuscarpor.ItemIndex = 3 then
begin
// montamos la sql
QDatos.SQL.Text := STRSQL + ' WHERE (Numero_Final) LIKE (' + QuotedStr('%' + Evalor.Text + '%') + ')' +
// Añadimos el WHER
// Añadimos el orden
STRORDER;
end;
If RGBuscarpor.ItemIndex = 4 then
begin
// montamos la sql
QDatos.SQL.Text := STRSQL + ' WHERE (Ultimo_Numero_Utilizado) LIKE (' + QuotedStr('%' + Evalor.Text + '%') + ')' +
// Añadimos el WHER
// Añadimos el orden
STRORDER;
end;

QDatos.Open;

end;

ecfisa 13-02-2012 21:24:35

Hola hondaalberto.

Por favor cuando incluyas código en tu mensaje utiliza los TAG's para que sea más fácil de entender, su uso es:



Saludos y gracias por tu colaboración.

Caro 13-02-2012 21:45:16

Hola hondaalberto, no he entendido muy bien tu pregunta, pero lo que creo que te falta es un begin end en el else. Como tu consulta se repite y solo cambia el campo, puedes reducir un poco tu codigo de esta forma:

Código Delphi [-]
const
// Consulta Sql
STRSQL = 'Select * From Numeros_de_Serie';
STRORDER = 'ORDER BY Codigo';

Var
 Campo:String;
begin
 QDatos.Close;

// Está vacío
 if (Evalor.Text = '') then begin
  QDatos.SQL.Text:= STRSQL;    
 end
 else
  begin
   Case rgbuscarpor.ItemIndex Of
    0: Campo := 'Codigo';
    1: Campo := 'Descripcion';
    2: Campo := 'Numero_Inicial';
    3: Campo := 'Numero_Final';
    4: Campo := 'Ultimo_Numero_Utilizado';
   end;
   QDatos.SQL.Text:=STRSQL+' WHERE '+Campo+' LIKE ('+QuotedStr('%'+Evalor.Text+'%')+')'+
   STRORDER;
  end;
  
 QDatos.Open;

hondaalberto 14-02-2012 19:34:01

Muchas Gracias a Todos por el Tiempo Invertido en ayudarme a solucionar este inconveniente en especial a Caro. Muy buena respuesta y muy eficiente la corrección que me recomendaste.


La franja horaria es GMT +2. Ahora son las 03:26:31.

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