PDA

Ver la Versión Completa : Consulta principiante por sintaxis


Leopard2
24-07-2014, 22:19:07
Hola, trabajo con Delphi 7 y Firebird 2.5 con componentes IBX, mi consulta es que necesito listar de una base solo los registros que digan activo = S, si lo hago directamente en la propiedad EditSql del Query me funciona :

select * from BODEGA Where activo = 'S'

Si trato de hacerlo en tiempo de ejecución no me deja por la sintaxis de las dobles cremillas :

with Query1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from Bodega');
SQL.Add('Where Activo = 'S' ');
Open;
end;


Si la paso como parametro me funciona pero me gustaría saber cual seria la sintaxis para comparar campos String :

with Query1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from Bodega');
SQL.Add('Where Activo = :Variable');
ParamByName('Variable').AsString := 'S';
Open;
end;


Saludos

Al González
24-07-2014, 22:39:33
Si la paso como parametro me funciona pero me gustaría saber cual seria la sintaxis para comparar campos String
Hola Leopard2.

Usando doble comilla sencilla por cada comilla literal de la expresión String. Ejemplo:
Query1.SQL.Text := 'Select * From Bodega Where Activo = ''S''';
Query1.Open;

Por otra parte, observa que la asignación a SQL.Text es equivalente a Close+Clear+Add. Así te ahorras un poco de código. ;)

Casimiro Notevi
24-07-2014, 22:40:24
Puedes poner la comilla 'entre comillas' o puedes usar QuotedStr
SQL.Add("where activo="+QuotedStr(S));
De todas formas, la versión con parámetros es la mejor opción.

EDITO: ha contestado Al González.

Leopard2
24-07-2014, 22:48:13
Ok. gracias por las repuestas.
saludos

Casimiro Notevi
25-07-2014, 10:09:45
Estupendo que te hayan servido las respuestas.


Por cierto, para otras ocasiones, no olvides poner un título descriptivo a tus preguntas, "Consulta principiante por sintaxis" no describe nada, no sirve para que otras personas con la misma duda pueda hacer una búsqueda y encontrar la solución a sus dudas.
Gracias por tu colaboración :)

adrall
25-07-2014, 10:19:25
Yo acostumbro a usar este sencillo codigo para verificar lo realmente enviado al TQuery. Despues de la comprobación elimino la linea y listo.


ShowMessage(TQuery.SQL.Text);
TQuery.Open;

Casimiro Notevi
25-07-2014, 10:29:04
Esa "técnica" es heredada de la época en que los lenguajes, compiladores, IDE.. no tenían depuradores, normalmente ocurría con el lenguaje Basic, que era interpretado.
Con delphi no necesitas escribir ese código y luego quitarlo, solamente debes usar el depurador, deteniéndote en esa línea.

adrall
25-07-2014, 11:13:25
Si, tienes razón, pero cuando tienes instalados componentes comerciales tipo, FastReport, Devart, etc. y usas el depurador, desconozco por que motivo, aparecen pantallazos pidiendo la ubicación de determinado fichero fuente del que obviamente no dispones y no puedes continuar la depuración. No entiendo porqué, ya que el codigo que estas depurando "teoricamente" no utiliza ese código... así que me he acostumbrado a utilizar minimamente el depurador.

Saludos

Casimiro Notevi
25-07-2014, 11:43:56
Hay una opción en la configuración del depurador, para que no entre en esos módulos.
Búscalo en la configuración del delphi que tengas.