Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-09-2012
Perenquen Perenquen is offline
Miembro
 
Registrado: jul 2003
Posts: 27
Poder: 0
Perenquen Va por buen camino
Problema con Parambyname

Buenas. Estaba teniendo problemas en una consulta con la que estaba usando Parambyname para pasar ciertas variables. Descubrí que el problema surge cuando le paso la misma variable varias veces. La consulta original es un poco larga asi que pongo un ejemplo con una más sencilla para ver si alguien me puede decir cual es el problema

Código:
AQ.SQL.text := 'SELECT :prueba,:prueba,:prueba';
AQ.Parameters.ParamByName('str').DataType := ftinteger;
AQ.Parameters.ParamByName('str').Value  := 35;
AQ.open;
Me debería devolver
35,35,35
Pero sin embargo me devuelve
35,NULL,NULL

Es como si sólo si cogiera la primera referencia al parámetro y el resto se lo saltara.

Un saludo y gracias de antemano.
Responder Con Cita
  #2  
Antiguo 18-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Perenquen Ver Mensaje

Código:
AQ.SQL.text := 'SELECT :prueba,:prueba,:prueba';
AQ.Parameters.ParamByName('str').DataType := ftinteger;
AQ.Parameters.ParamByName('str').Value  := 35;
AQ.open;
Me debería devolver
35,35,35
Pero sin embargo me devuelve
35,NULL,NULL
Ese ejemplo no sirve absolutamente para nada, bueno, sí, para saber que está mal, no puedes poner parámetros con el mismo nombre y luego en parambyname has puesto 'str' que no es el nombre de ninguno de ellos, bueno, del único, 'prueba'
En todo caso sería algo así:

Código Delphi [-]
AQ.SQL.text := 'SELECT * from tabla where campotal= :aprueba1 and campocual= :aprueba2 and campootro= :aprueba3';
AQ.Parameters.ParamByName('aprueba1').asinteger := 20;
AQ.Parameters.ParamByName('aprueba2').Value  := 35;
AQ.Parameters.ParamByName('aprueba3').Value  := loquesea;
AQ.open;
Responder Con Cita
  #3  
Antiguo 18-09-2012
Perenquen Perenquen is offline
Miembro
 
Registrado: jul 2003
Posts: 27
Poder: 0
Perenquen Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Ese ejemplo no sirve absolutamente para nada, bueno, sí, para saber que está mal, no puedes poner parámetros con el mismo nombre y luego en parambyname has puesto 'str' que no es el nombre de ninguno de ellos, bueno, del único, 'prueba'
En todo caso sería algo así:

Código Delphi [-]
AQ.SQL.text := 'SELECT * from tabla where campotal= :aprueba1 and campocual= :aprueba2 and campootro= :aprueba3';
AQ.Parameters.ParamByName('aprueba1').asinteger := 20;
AQ.Parameters.ParamByName('aprueba2').Value  := 35;
AQ.Parameters.ParamByName('aprueba3').Value  := loquesea;
AQ.open;

Bueno, es obvio que cometí un error al transcribir el código

Código:
AQ.SQL.text := 'SELECT :prueba,:prueba,:prueba';
AQ.Parameters.ParamByName('prueba').DataType := ftinteger;
AQ.Parameters.ParamByName('prueba').Value  := 35;
AQ.open;
La razón de poner varios parámetros iguales es porque en la consulta original se utilizan en diversas sentencias SQL. Al margen del error cometido, lo que intenta demostrar el ejemplo es si saber si se puede utilizar el mismo parámetro varias veces dentro de la consulta.

El ejemplo que pones funciona correctamente, pero no es lo que pretendo tratar en este tema, ya que no se repite ningún parámetro.

Un saludo y gracias por tu pronta respuesta.
Responder Con Cita
  #4  
Antiguo 18-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Veamos, en principio, no puedes pasar como parámetros nombres de campos y...
tampoco puedes repetir el nombre del parámetro, ¿cómo sabe mysql a cual de ellos te refieres?
Responder Con Cita
  #5  
Antiguo 18-09-2012
Perenquen Perenquen is offline
Miembro
 
Registrado: jul 2003
Posts: 27
Poder: 0
Perenquen Va por buen camino
Quizás el error lo cometí al poner una consulta tan banal para simplificar la cuestión a tratar.

La razón de pasar el mismo parametro quizás se vea mejor en una consulta como esta

Código:
 SELECT funcion1(:ID),funcion2(:ID)
Lo que se pretende (y tiene sentido) es es que en cada :ID se sustituya por su valor correspondiente

Claro que se puede hacer como:

Código:
 SELECT funcion1(:ID1),funcion2(:ID2)
Siendo ID1=ID2=35

Pero esto, desde mi punto de vista, es lo que no tiene mucho sentido. Sobre todo si ese valor se repite varias veces dentro de la consulta.

Un saludo.
Responder Con Cita
  #6  
Antiguo 18-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Ya te digo, desconozco mysql, pero dudo mucho que puedas hacer eso, repito lo de antes, ¿cómo sabe mysql a cual de los parámetros te refieres?
Responder Con Cita
  #7  
Antiguo 18-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
A ver si alguien que conozca mejor mysql puede dar una opinión más segura.
Responder Con Cita
  #8  
Antiguo 18-09-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Ya te digo, desconozco mysql, pero dudo mucho que puedas hacer eso, repito lo de antes, ¿cómo sabe mysql a cual de los parámetros te refieres?
¿Cuál sería el problema? Se trata de proveer un mismo valor en varios puntos de la consulta SQL. No recuerdo que hubiera una restricción de no poder repetir parámetros.

// Saludos
Responder Con Cita
  #9  
Antiguo 18-09-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
El problema no es de MySQL sino del componente que usas para conectarte, yo uso Zeos y puedo utilizar sin problemas varias veces el mismo parámetro en la consulta. De hecho ni siquiera tengo que poner nada en los datos de cada parámetro, Zeos los crea automáticamente.

Código Delphi [-]
ZDataset.SQL.Add('SELECT rueba,rueba,rueba');
ZDataset.ParamByNAme('prueba').AsInteger := 35;
ZDataset.Open;
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #10  
Antiguo 19-09-2012
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 18
TiammatMX Va camino a la fama
Cita:
Empezado por AzidRain Ver Mensaje
El problema no es de MySQL sino del componente que usas para conectarte...
Yo tengo el MISMO problema con MS SQL Server, y después de mucho trastear, tuve que poner el mismo valor en tres parámetros diferentes (refiriéndome a tu caso, por ejemplo). Si por mí fuera, elegiría usar ZEOS, pero donde manda capitán...
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problemas con el ParambyName giancarlorc SQL 1 23-10-2011 20:27:06
Sobre el uso de ParamByName salvica SQL 11 24-11-2008 19:28:50
ParamByName en ADO silviodp Tablas planas 5 12-01-2008 13:50:01
Problema con Parambyname y dataset Rockin Firebird e Interbase 4 12-10-2007 01:10:47
Insert y parambyname Dantael SQL 1 17-11-2003 09:50:24


La franja horaria es GMT +2. Ahora son las 18:09:59.


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