Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Podeis decirme que hay mal en esta consulta (https://www.clubdelphi.com/foros/showthread.php?t=65469)

José Luis Garcí 17-12-2009 16:13:22

Podeis decirme que hay mal en esta consulta
 
La Consulta es la siguiente

Código Delphi [-]
    if not (DataSourcePrin.DataSet.State=dsInsert) then    //OJO SOBRE EL DATASOURCE PRINCIPAL
    begin
      //Mostramos por tipo documento
      IBQLSGrabando.Active:=True;
      IBQLSGrabando.Active:=False;
      IBQLSGrabando.SQL.Clear;
      IBQLSGrabando.SQL.Add('SELECT * from LOTES_SALIDA WHERE '+
                                  '(LOTES_SALIDA.FECHA = ''''17/12/2009'''') AND'+
                           '(UPPER( LOTES_SALIDA.TIPO_DOCUMENTO) = UPPER(''''Salida de personal'''')) AND'+
                            '(UPPER( LOTES_SALIDA.NUMERO_DOCUMENTO) = UPPER(''''0''''))');
      IBQLSGrabando.Active:=True;

La base de datos es firebird, uso un IbQuery y el error
es

SQL Error code = -104
Token Unknown - line 1, column 58
17.

Neftali [Germán.Estévez] 17-12-2009 17:42:38

La verdad es que ese montón de comillas no tiene buena pinta... :D:D
¿Y si usas QuotedStr o parámetros?

Axel_Tech 17-12-2009 19:01:28

Te sobra una comilla a ambos lados de 17/12/2009, Salida de personal y 0.
O sea todos los sitios donde tienes comillas ;) serían 3 a cada lado no 4. Aunque para evitar problemas es mejor como dice Neftalí usar la función QuotedStr o parámetros.

gatosoft 18-12-2009 03:36:25

efectivamente te sobra un par de comillas a cada lado... podrias intentar utilizar la funcion estandar: quotedStr()

Quedaria algo como:

Código:

IBQLSGrabando.SQL.Add(
  'SELECT * '
 +' from LOTES_SALIDA '
 +' WHERE (LOTES_SALIDA.FECHA = '+QuotedStr('17/12/2009')+')'
 +' AND (UPPER( LOTES_SALIDA.TIPO_DOCUMENTO) = UPPER('+QuotedStr('Salida de personal')+'))'
 +' AND (UPPER( LOTES_SALIDA.NUMERO_DOCUMENTO) = UPPER('+QuotedStr('0')+'))'
 );

Espero no hbaerhecho mal las cuentas en los parentesis... :D

saludos

José Luis Garcí 18-12-2009 08:59:12

Gracias a todos soluionado con el QuotedStr, me solto un error del String en la fecha, pero recordando los viejos tiempos cambie el orden del dia y el mes y funciono perfectamente, no se por que pasa, si alguien puede darme una explicación, aunque me temo que es una cuestión de idioma

Axel_Tech 18-12-2009 09:48:47

Cita:

Empezado por José Luis Garcí (Mensaje 349102)
recordando los viejos tiempos cambie el orden del dia y el mes y funciono perfectamente, no se por que pasa, si alguien puede darme una explicación, aunque me temo que es una cuestión de idioma

A mí me pasa lo mismo, tengo que cambiar el día por el mes para que me coja bien las fechas. No es por la base de datos, pues usando VB o Access no da problemas. Tampoco la configuración regional y de idioma pues está todo puesto en español.
Asique lo único que se me ocurre es que sea el IDE que está en inglés (D2009), no sé si será por eso.

Neftali [Germán.Estévez] 18-12-2009 10:17:29

¿Y no será una configuración de la instalación del servidor?
No se si en IB/FB funcionará, pero en SQL Server funciona perfectamente (y evita muchos problemas) utilizar el "formato chino" y te olvidas del orden del mes y el año.

No hacen falta separadores y se coloca como YYYYMMDD

Código SQL [-]
   ...
   where LastTimeUpdate < '20091217'

Casimiro Noteví 18-12-2009 11:34:13

En firebird las fechas son anglosajonas 'mm/dd/aaaa', pero también puedes ponerlo de esta forma más cómoda: 'dd.mm.aaaa', así, con el punto de separador. :)

Axel_Tech 18-12-2009 16:20:09

Cita:

Empezado por Neftali (Mensaje 349108)
¿Y no será una configuración de la instalación del servidor?

No creo porque ya te digo que sólo pasa con Delphi, en todo lo demás las fechas se usan en formato dd/mm/aaaa.

Casimiro Noteví 18-12-2009 16:31:51

Cita:

Empezado por Axel_Tech (Mensaje 349125)
No creo porque ya te digo que sólo pasa con Delphi, en todo lo demás las fechas se usan en formato dd/mm/aaaa.

Repito :p :
En firebird las fechas son anglosajonas 'mm/dd/aaaa', pero también puedes ponerlo de esta forma más cómoda: 'dd.mm.aaaa', así, con el punto de separador. :)

Para ser más exacto, creo recordar que son 3 formas posibles:

DD.MM.YYYY
MM/DD/YYYY
YYYY-MM-DD


La franja horaria es GMT +2. Ahora son las 00:33:44.

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