Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Delphi no interpreta query (https://www.clubdelphi.com/foros/showthread.php?t=49355)

aikai 19-10-2007 13:14:31

Delphi no interpreta query
 
Holas,

no sé si estoy haciendo mal uso del foro, si es así, mis disculpas; pero vi mi otro hilo con una marca como si estuviera resuelto y, en realidad, la cuestión por la que lo abrí se solucionó con vuestra ayuda. Pero me surgió la siguiente... No consigo que la aplicación en delphi me ejecute la sentencia que os muestro (me da error ODBC... Pocos parámetros... Se esperaba 1).

He probado a cambiar paréntesis, '', etc. Toy desesperada ya :eek: La consulta funciona perfectamente desde el access y seguro que en delphi no lo hace por algun detalle de sintaxis q se me escapa. Gracias!

Código SQL [-]
SELECT Sum(IIf(IsNull(g.exrate),gp.total_inv,(gp.total_inv)/g.exrate)) AS INVERSION, 
Sum(IIf(IsNull(g.exrate),gp.total_ganado-gp.total_inv,(gp.total_ganado-gp.total_inv)/g.exrate)) 
AS BENEFICIO, (BENEFICIO/INVERSION)*100 AS MARGEN, Format(g.date'yyyy') & ", " & Format(g.date,'mm') AS meses
FROM tabla1 AS g INNER JOIN tabla2 AS gp ON g.id = gp.id
WHERE gp.id = (select prefer_valor from prefs where pref_key = 'PRIN')
GROUP BY Format(g.date,'yyyy') & ", " & Format(g.date,'mm')
ORDER BY Min(g.date);

dec 19-10-2007 13:19:32

Hola,

Es probable que se trate de un error de sintáxis, y, siendo así, no basta conque pongas la consulta SQL que tratas de llevar a cabo, sino el código fuente de Delphi donde tratas de "embeberla". Así, sin más, la consulta que muestras no puede guardarse en una cadena en Delphi, puesto que contiene caracteres que "partirían" dicha cadena y la harían inválida.

Así que si te es posible muestra cómo tratas de hacer la consulta en Delphi, y el mensaje de error exacto que obtienes.

PD. Fíjate que en este foro existen las etiquetas [sql][/sql], [delphi][/delphi], entre otras, que mostrarán el código fuente correspondiente de manera que se lea mejor.

aikai 19-10-2007 13:39:14

Gracias por las recomendaciones ;)

El código sql lo tengo puesto directamente en el ADOQuery1.SQL;

Tengo los componentes ADOConnection, ADOQuery, DBGrid y Datasource debidamente relacionados, en principio.

Y en el form un botón con

Código Delphi [-]
ADOQuery1.Open;

Qué estoy haciendo mal?

Lepe 19-10-2007 13:48:29

Intentando hacer de adivino:
Código SQL [-]
WHERE gp.id = (select prefer_valor from prefs where pref_key = 'PRIN')

¿exiten varios registros que su pref_key sea igual a 'PRIN'?
Si es así, estas usando un operador de igualdad que espera un solo registro, de ahí el fallo. Prueba usando:
Código SQL [-]
WHERE gp.id in  (select prefer_valor from prefs where pref_key = 'PRIN')

Saludos

aikai 19-10-2007 13:56:34

Gracias Lepe, pero no hay duplicidad. Y además, la query va bien en access. Lo he probado aun así y nada.

The_Avatar 19-10-2007 14:01:09

Falta una coma en el primer Format...

aikai 19-10-2007 14:30:19

Thanks. Que va... :( He quitado toda referencia a fechas, los format, el group by y el order y nada. Además, ya os digo, que tal como la pongo en el post corre perfecta en access.

Lo he copiado y pegado en la propiedad ADOQuery1.SQL tal cual... no será que habrá que ponerlo en líneas diferentes o con otro formato... No sé, lo mismo estoy diciendo tonterías...

AzidRain 19-10-2007 19:08:01

Lo que pasa es que IIF es una función de Access... en MySQL el equivalente es IF() asi sin la otra "I".

Ojo con Access porque su SQL no es precisamente muy apegado al estandar que digamos (que raro verdad?). Si estas solo copiando querys de access a MySQL te vas a encontrar muchos problemas iguales...Es mejor que revises los querys antes de correrlos en mysql buscando las funciones que utilices en el manual de sql para ver si existen y si no buscar su equivalente.

Aqui tienes un link a
una buena pagina con ejemplos y demas:

fredo 19-10-2007 20:01:07

Tal ves sea idiota lo que te dire pero... probaste quitando la propiedad param check? o sea paramcheck = false;

hach 20-10-2007 16:56:23

como dijo the_avatar...
 
si lo copiaste y pegaste tal cual, en Format(g.date'yyyy') te falta la coma...

AzidRain 20-10-2007 17:14:43

Me encantan los posts como este en donde el autor no se digna en decirnos: "no me funcionó", "si me funcionó", "no le entiendo"...etc. y todos seguimos dando mas y mas soluciones pensando que ninguna de las anteriores le ha funcionado...:(


La franja horaria es GMT +2. Ahora son las 08:56:07.

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