Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-06-2004
azaagh azaagh is offline
Miembro
 
Registrado: jun 2004
Posts: 34
Poder: 0
azaagh Va por buen camino
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!!
Responder Con Cita
  #2  
Antiguo 12-06-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
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.

Última edición por __marcsc fecha: 12-06-2004 a las 09:29:31.
Responder Con Cita
  #3  
Antiguo 12-06-2004
azaagh azaagh is offline
Miembro
 
Registrado: jun 2004
Posts: 34
Poder: 0
azaagh Va por buen camino
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 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!!!!

Última edición por azaagh fecha: 12-06-2004 a las 09:14:10.
Responder Con Cita
  #4  
Antiguo 12-06-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
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 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

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 )

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

Última edición por __marcsc fecha: 12-06-2004 a las 09:33:27.
Responder Con Cita
  #5  
Antiguo 12-06-2004
azaagh azaagh is offline
Miembro
 
Registrado: jun 2004
Posts: 34
Poder: 0
azaagh Va por buen camino
la culpa es tuya!!! 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...

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


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

Última edición por azaagh fecha: 12-06-2004 a las 10:11:19.
Responder Con Cita
  #6  
Antiguo 12-06-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
Cita:
Empezado por azaagh
la culpa es tuya!!! 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...
Ese es TU problema, no es MI problema, es TU problema



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
Responder Con Cita
  #7  
Antiguo 12-06-2004
azaagh azaagh is offline
Miembro
 
Registrado: jun 2004
Posts: 34
Poder: 0
azaagh Va por buen camino
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 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!!
Responder Con Cita
  #8  
Antiguo 12-06-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
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!!
Responder Con Cita
  #9  
Antiguo 12-06-2004
azaagh azaagh is offline
Miembro
 
Registrado: jun 2004
Posts: 34
Poder: 0
azaagh Va por buen camino
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

Última edición por azaagh fecha: 12-06-2004 a las 11:19:21.
Responder Con Cita
  #10  
Antiguo 12-06-2004
Avatar de cbrrr
cbrrr cbrrr is offline
Miembro
 
Registrado: jun 2004
Posts: 57
Poder: 20
cbrrr Va por buen camino
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
__________________
Si no tienes algo que decir más importante que el silencio, cállate
Responder Con Cita
  #11  
Antiguo 12-06-2004
azaagh azaagh is offline
Miembro
 
Registrado: jun 2004
Posts: 34
Poder: 0
azaagh Va por buen camino
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 nolontiendo
Responder Con Cita
  #12  
Antiguo 12-06-2004
Avatar de cbrrr
cbrrr cbrrr is offline
Miembro
 
Registrado: jun 2004
Posts: 57
Poder: 20
cbrrr Va por buen camino
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';
__________________
Si no tienes algo que decir más importante que el silencio, cállate
Responder Con Cita
  #13  
Antiguo 12-06-2004
azaagh azaagh is offline
Miembro
 
Registrado: jun 2004
Posts: 34
Poder: 0
azaagh Va por buen camino
me alegra saberlo!!
solo me faltaba los errores de los querys para terminar el proyecto...

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

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!!! (no me gusta nada programar)

PD: os pondre en los creditos

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

Última edición por azaagh fecha: 12-06-2004 a las 11:56:25.
Responder Con Cita
  #14  
Antiguo 12-06-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
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...

Última edición por __marcsc fecha: 12-06-2004 a las 12:12:23.
Responder Con Cita
  #15  
Antiguo 12-06-2004
azaagh azaagh is offline
Miembro
 
Registrado: jun 2004
Posts: 34
Poder: 0
azaagh Va por buen camino
muy bien explicado, ahora lo pillo... ahora que ya funciona....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 13:15:46.


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
Copyright 1996-2007 Club Delphi