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)
-   -   AYUDA! problemas con querys (https://www.clubdelphi.com/foros/showthread.php?t=11386)

azaagh 12-06-2004 03:09:50

AYUDA! problemas con querys
 
hola...tengo 2 fallos en este codigo....y no se el porque!! si alguien me echa una mano...le estare eternamente agradecido!! :(

Código Delphi [-]
dm1.Query1.Close;
dm1.Query1.clear;
dm1.Query1.Text('SELECT SUM(ataque) AS suma FROM jugadores WHERE equipo = :team AND titular = '*'');
dm1.Query1.ParamByName('team').AsString := ecasa;

uso DBE con paradox 7....en delphi 7
dm1 es un datamodule donde se encuentran las querys, tablas y demas

ME DA ESTOS TRES FALLOS:
en la linea 2: undeclared identifier: 'clear'
en la linea 3: Missing operator or semicolon
en la linea 3 operator not applicable to this operand type

sera por el sum? por el text? decidme como solucionarlo!!:confused: :confused: :confused:

__marcsc 12-06-2004 05:17:58

Hola,

Para que al menos te compilara:

Código Delphi [-]
dm1.Query1.Close;
dm1.Query1.SQL.Clear;
dm1.Query1.SQL.Text('SELECT SUM(ataque) AS suma FROM jugadores WHERE equipo = :team AND titular = ' + QuotedStr('*'));
dm1.Query1.ParamByName('team').AsString := ecasa;
//No olvides hacer el Open
dm1.Query1.Open;

Digo que es para que te compilara porqué no tengo muy claro lo que quieres hacer con el asterisco este que le pones... seguro que lo que quieres hacer no es un like?

Fíjate que no puede tratarse del sum dado que los SQL se interpretan en tiempo de ejecución o de diseño en algunos casos, pero no en tiempo de compilación.

Saludos.

azaagh 12-06-2004 09:05:53

lo del asteristo es "cuando el campo titular vale '*' ", asi k no me pongas cosas raras :P
el open lo ponia despues!! haber k te crees :D se me da mal la programacion, pero no es pa tanto.
ahora te comente si sigue fallando
editado: sigue fallando!!!
Código Delphi [-]
//cuando pongo
dm1.Query1.Text('SELECT SUM(ataque) AS suma FROM jugadores WHERE equipo = :team AND titular = ''*''');
//me dice, que en esa linea hay 2 fallos: "missing operator or semicolon" y 
//"statement expected, but expression of type String found"
 
//y si cambio a una sola coma el asterisco:
dm1.Query1.Text('SELECT SUM(ataque) AS suma FROM jugadores WHERE equipo = :team AND titular = '*'');
//me dice "missing operator or semicolon" y "operator not applicable to this
// operand type
 
// NO SE KE HACER!!!!

__marcsc 12-06-2004 09:27:45

Cita:

Empezado por azaagh
lo del asteristo es "cuando el campo titular vale '*' ", asi k no me pongas cosas raras :P

Solo tenía mis dudas ;)

Cita:

Empezado por azaagh
el open lo ponia despues!! haber k te crees :D se me da mal la programacion, pero no es pa tanto.

Lo del open era un mix entre recordatorio y broma, no te me vayas a enfadar ;)

Cita:

Empezado por azaagh
sigue fallando!!!

Te doy un tirón de orejas porqué no te has leído atentamente mi respuesta anterior ;) :p :D

La propiedad Text no forma parte del Query, sinó de la propiedad SQL del query. Revisa el código que te pasé y verás que está en negrita.

(esto me lo había olvidado en el mensaje original, ahora lo he editado para que salga el correcto, piensa que cuando escribí esto eran las cinco de la mañana :eek: )

En el segundo error que dices, fíjate que vuelves a cometer el fallo de dejar de usar el carácter ' para cerrar correctamente los strings. Como a veces esto cuesta de seguir, Delphi incluye la función QuotedStr, que te mencionaba antes, que hace justamente esto, si tu le pasas un string, digamos "Hola", QuotedStr, te devuelve "'Hola'", es decir, entre comillas simples.

Saludos :cool:

azaagh 12-06-2004 10:09:13

la culpa es tuya!!! :D :D :D no habias puesto query.SQL.text!!!!
no me vengas con que eran las 5 de la mañana y tal... que yo llevo to la noxe sin dormir dandole vueltas al programa...:rolleyes:

bueno, de todas formas, es mejor tarde que nunca :p , asi que practicamente he acabado el programa y puedo dormir feliz :D


en fin...no te lo vas a creer, pero aun pone missing operator or semicolon!!!
y no falta ni un punto y coma!!! :confused: :confused: :confused:

__marcsc 12-06-2004 10:15:46

Cita:

Empezado por azaagh
la culpa es tuya!!! :D :D :D no habias puesto query.SQL.text!!!!
no me vengas con que eran las 5 de la mañana y tal... que yo llevo to la noxe sin dormir dandole vueltas al programa...:rolleyes:

Ese es TU problema, no es MI problema, es TU problema

:D :D :D :D :D

Cita:

Empezado por azaagh
en fin...no te lo vas a creer, pero aun pone missing operator or semicolon!!!
y no falta ni un punto y coma!!!

Pues a ver, vuelve a pegar el trozo de código donde te salta el error, a ver si duermes ya de una vez, que esto no puede ser buena pa la salud ;)

azaagh 12-06-2004 10:59:31

el fallo me da en todos los sitios que tengo consultas.... un ejemplo:

Código Delphi [-]
dm1.Query1.Close;
dm1.Query1.sql.clear;
dm1.Query1.sql.Text('SELECT SUM(ataque) AS suma FROM jugadores WHERE equipo = :team AND titular = '*'');
dm1.Query1.ParamByName('team').AsString := ecasa;
dm1.Query1.Open;
cataque := dm1.Query1.FieldByName('suma').asinteger;

me dice el mensaje de error en la linea 3, la del sql.text...."missing operator or semicolon"..pero yo no veo k falta ningun semicolon :p en la consulta no me digas,porque ya lo he probado y sigue igual

PD: ya te creias que esta durmiendo?? hasta que esto no funcione no puedo!!
:rolleyes: :rolleyes: :D

__marcsc 12-06-2004 11:03:19

Versión 1:

Código Delphi [-]
dm1.Query1.Close;
dm1.Query1.sql.clear;
dm1.Query1.sql.Text('SELECT SUM(ataque) AS suma FROM jugadores WHERE equipo = :team AND titular = ''*''');
dm1.Query1.ParamByName('team').AsString := ecasa;
dm1.Query1.Open;
cataque := dm1.Query1.FieldByName('suma').asinteger;

Versión 2:


Código Delphi [-]
dm1.Query1.Close;
dm1.Query1.sql.clear;
dm1.Query1.sql.Text('SELECT SUM(ataque) AS suma FROM jugadores WHERE equipo = :team AND titular = ' + QuotedStr('*'));
dm1.Query1.ParamByName('team').AsString := ecasa;
dm1.Query1.Open;
cataque := dm1.Query1.FieldByName('suma').asinteger;

A que la 2 se entiende mejor? ;)

Venga! A dormir!! :mad:

azaagh 12-06-2004 11:16:33

lo reconozco...eso ha funcionado...pero que es esa funcion? pa ke sirve?
usala aqui...que da el mismo fallo y no se donde meterla:
Código Delphi [-]
//esta linea me da DOS fallos de tipo: missing operator or semicolon
dm1.Query1.sql.Text('SELECT logo, nombre || ' ' || ciudad AS ename FROM equipos WHERE nombre = :kequipo');

no creo k me vaya a dormir...me he tomao 5 litros de cafe y estoy to enzarpao :D :D

cbrrr 12-06-2004 11:22:32

Código Delphi [-]
  dm1.Query1.sql.Text('SELECT logo, nombre || ' + QuotedStr(' ') + 
             ' || ciudad AS ename FROM equipos WHERE nombre = :kequipo');
Mírate la ayuda de la función, verás que te dice que entrecomilla el texto que le pasas como parámetro

azaagh 12-06-2004 11:27:24

malas noticias: eso ultimo que me has puesto
Código Delphi [-]
dm1.Query1.sql.Text('SELECT logo, nombre || ' + QuotedStr(' ') + ' || ciudad AS ename FROM equipos WHERE nombre = :kequipo');
tambien da error de missing operator or semicolon :rolleyes: :rolleyes: nolontiendo

cbrrr 12-06-2004 11:31:25

Perdón, cierto, la propiedad Text no funciona así, sustituye el Text por Add o bien

Código Delphi [-]
 dm1.Query1.sql.Text := 'SELECT logo, nombre || ' + QuotedStr(' ') +             
         ' || ciudad AS ename FROM equipos WHERE nombre = :kequipo';

azaagh 12-06-2004 11:48:23

me alegra saberlo!!
solo me faltaba los errores de los querys para terminar el proyecto...:D :D

nove, y yo llevo 2 dias pensando que era de la otra forma!!! :rolleyes:

pero weno, ya solo me queda que funcione y los retoques finales!

gracias a todos los k me aveis ayudados esta semana!!!

espero no necesitar mas vuestra ayuda!!!:p :p (no me gusta nada programar):D

PD: os pondre en los creditos

editado:
PD: me equivoqué...:rolleyes: :rolleyes: ..tengo un ultimo fallo..lo comento en otro hilo

__marcsc 12-06-2004 12:10:16

Vamos a ver, ataquemos el problema des del principio...

Te estás confundiendo porqué Delphi y SQL utilizan el mismo operador para denotar un string.

Imaginate que tu quieres escribir un SQL de este estilo

Código SQL [-]
SELECT *
FROM equipos 
WHERE nombre = 'Pepito'

Ok, hasta aquí no problem. El problema viene cuando tu, utilizando código fuente Delphi, quieres generar esta sentencia.

Lo que tu, por lo que veo, intentarías es

Código Delphi [-]
Query1.SQL.Add('SELECT * FROM equipos WHERE Nombre = 'Pepito');

Este código no compila. Porqué?

Vale, hagamos una suposición. Imaginate que las cadenas en Delphi se denotan con " y no con ' . Verdad que sería lógico escribir:

Código Delphi [-]
Query1.SQL.Add("SELECT * FROM equipos WHERE Nombre = 'Pepito' ");

Pues aquí está el problema: que confundes lo que son los carácteres de string que forman parte de la sentencia SQL y los que forman parte de Delphi porqué se denotan igual.

En el código que no compila, no lo hace por lo siguiente, el compilador detecta un string, y un identificador no válido:

'SELECT * FROM equipos WHERE Nombre = '//este es el string que interpreta
Pepito' //esto se queda colgado y hace que no compile

lo que hay que hacer en delphi para poder utilizar el carácter ' dentro de un string en código es ponerlo dos veces. Por esto el código correcto en Delphi es:

Código Delphi [-]
Query1.SQL.Add('SELECT * FROM equipos WHERE Nombre = ''Pepito''');

Para lo que sirve la función QuotedStr es para no tener que escribir todas estas comillas, lo que hace es agregarte el carácter ' al principio y final del string. (esto ya te lo contaba en un mensaje anterior, y lo puedes mirar en el help de Delphi)

Por esto, el código más leible es

Código Delphi [-]
Query1.SQL.Add('SELECT * FROM equipos WHERE Nombre = ' + QuotedStr('Pepito'));

Espero que te sirva el rollo.

Saludos!

EDIT: Coño, vaya despiste con la propiedad Text... Sin comentarios... :rolleyes: :D

azaagh 12-06-2004 12:41:52

muy bien explicado, ahora lo pillo...:p ahora que ya funciona....:rolleyes:


La franja horaria es GMT +2. Ahora son las 03:01:37.

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