Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Error de Sintaxis en Sentencia SQL (https://www.clubdelphi.com/foros/showthread.php?t=86638)

edwin.simon 10-09-2014 19:45:57

Error de Sintaxis en Sentencia SQL
 
Hola buena tarde, para todos.
estoy haciendo una pantalla para buscar un registro por tres opciones diferente usando un RadioGroup, todo corre bien pero cuando busco por código no me dice nada y por cédula o nombre me presenta un error de sistnaxi en la clausura From, a continuación como estoy haciendo la busqueda.

Código Delphi [-]
procedure TFrm_Consulta.Edit1Change(Sender: TObject);
const
     STRSQL = 'Select * From Carnet';
begin
 case RadioGroup1.ItemIndex of
 0 : begin
     Qry_BuscarRegistro.Close;
  if (Edit1.Text = '') then begin
      Qry_BuscarRegistro.SQL.Text := STRSQL;
  end
  else begin
       Qry_BuscarRegistro.SQL.Text := STRSQL +
       ' WHERE Codigo_Carnet LIKE ' +QuotedStr('%' +Edit1.Text+ '%');
       end;
       Qry_BuscarRegistro.Open;
       end;
end;
end;
procedure TFrm_Consulta.Edit2Change(Sender: TObject);
const
STRSQL = 'Select * From Carnet';
begin
 case RadioGroup1.ItemIndex of
 1 : begin
     qry_BuscarRegistro.Close;
  if (Edit2.Text = '') then begin
      Qry_BuscarRegistro.SQL.Text := STRSQL;
  end
  else begin
       Qry_BuscarRegistro.SQL.Text := STRSQL +
       'WHERE Codigo_Pasaporte' +QuotedStr('%' +Edit2.Text+ '%');
       end;
       Qry_BuscarRegistro.Open;
end;
end;
end;

procedure TFrm_Consulta.Edit3Change(Sender: TObject);
const
STRSQL = 'Select * From Carnet';
begin
      case RadioGroup1.ItemIndex of
      2 : begin
          Qry_BuscarRegistro.Close;
       if (Edit3.Text = '') then begin
          Qry_BuscarRegistro.SQL.Text := STRSQL
          end
       else begin
          Qry_BuscarRegistro.SQL.Text := STRSQL +
          'where Nombre like '+QuotedStr('%'+Edit3.Text+ '%');
          end;
          Qry_BuscarRegistro.Open;
          end;
          end;

end;

mamcx 10-09-2014 19:55:54

Inspecciona el valor de Qry_BuscarRegistro.SQL.Text luego de asignarle el sql...

roman 10-09-2014 20:04:53

En Edit2Change y Edit3Change, a diferencia de Edit1Change, en l clúsula else de la sentencia case no dejas un espacio antes de WHERE.

// Saludos

nlsgarcia 10-09-2014 20:08:41

roman,

Cita:

Empezado por roman
...En Edit2Change y Edit3Change...la sentencia case no dejas un espacio antes de WHERE...

^\||/

Nelson.

roman 10-09-2014 20:19:51

Por otra parte, te recomiendo:
  1. Usar SQL.Lines para agregar líneas a una consulta en lugar de concatenar con SQL.Text
  2. Evitar al máximo posible armar las consultas al vuelo
  3. Usar parámetros en la consulta
  4. Simplificar

Por ejemplo, aun cuando no conozco el resto del código, parecería que puedes usar el mismo evento OnChange para los tres Edit, además de que te puedes evitar la concatenación de la consuta SQL:

Código Delphi [-]
procedure TFrm_Consulta.EditChange(Sender: TObject);
const
  STRSQL = 'select * from Carnet where Codigo_Carnet like "%:codigo%"';

begin
  case RadioGroup1.ItemIndex of
    0:
    begin
      Qry_BuscarRegistro.Close;
      Qry_BuscarRegistro.ParamByName('codigo').AsString := Trim((Sender as TEdit).Text);
      Qry_BuscarRegistro.Open;
    end;
  end;   
end;

Si el control de edición (Edit) está vacío, la consulta quedará así:

Código SQL [-]
select * from Carnet where Codigo_Carnet like "%%"

que de todas maneras te dará todos los registros, así que no hace falta dividir en casos.

Fíjate que así, podrías entonces colocar el texto SQL directamente en el componente Query durante el diseño, en lugar de asignarlo en la ejecución, lo que da claridad a tu código.

// Saludos

edwin.simon 10-09-2014 20:31:13

mil gracias mamcx y roman, todo corre bien pero no me busca nada y he leído la rutina por doto los puntos y no se que pasa


La franja horaria es GMT +2. Ahora son las 17:00:45.

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