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)
-   -   Consulta principiante por sintaxis (https://www.clubdelphi.com/foros/showthread.php?t=86358)

Leopard2 24-07-2014 22:19:07

Consulta principiante por sintaxis
 
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 :

Código SQL [-]
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 :

Código SQL [-]
    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 :

Código SQL [-]
    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

Cita:

Empezado por Leopard2 (Mensaje 479360)
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:
Código Delphi [-]
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
Código Delphi [-]
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.

Código Delphi [-]
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.


La franja horaria es GMT +2. Ahora son las 05:32:25.

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