Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-08-2012
LuisMiguel LuisMiguel is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 33
Poder: 0
LuisMiguel Va por buen camino
Duda con Consulta C++ y Mysql

Saludos amigos, tengo algunos problemas con una consulta que estoy haciendo desde C++ hacia Mysq
Para comenzar la conexion de C++ a Mysql lo realizo perfectamente, el problema esta cuando quiero obtener unos de los datos desde la BD
Código:
String Nombre = nombre->Text;
   String Proteinas = proteinas->Text;
   String Carbohidratos = carbohidratos->Text;
   String Grasas = grasas->Text;
   String Fibra = fibra->Text;
   //buscar a ver si existe el Grano
   Form3->GuardarPorcentajes->Close();
   Form3->GuardarPorcentajes->SQL->Clear();
   Form3->GuardarPorcentajes->SQL->Add("SELECT granosporcentajes.Nombre FROM granosporcentajes where Nombre=:Nombre");
  Form3->GuardarPorcentajes->Parameters->ParamByName("Nombre")->Value=Nombre;
   Form3->GuardarPorcentajes->Open();
   String NombreEcontrado=Form3->GuardarPorcentajes->FieldByName("idGrano")->Value;
De esta forma me da error
Código:
 Form3->GuardarPorcentajes->SQL->Add("SELECT granosporcentajes.Nombre FROM granosporcentajes where Nombre=:Nombre");
En Access lo hacia como en la linea anterior
Lo cambie para
Código:
Form3->GuardarPorcentajes->SQL->Add("SELECT  granosporcentajes.Nombre FROM granosporcentajes where  Nombre='Nombre');
Y trabaja pero me da error en la siguiente linea
Código:
Form3->GuardarPorcentajes->Parameters->ParamByName("Nombre")->Value=Nombre;
raised exception class edatabaseerror with message 'GuardarPorcentajes:Parameter'Nombre' not found'
Otra cosa es que si para obtener un campo de la BD lo puedo hacer asi como en access
Código:
String NombreEcontrado=Form3->GuardarPorcentajes->FieldByName("idGrano")->Value;
Saludos a todos.
Responder Con Cita
  #2  
Antiguo 12-08-2012
LuisMiguel LuisMiguel is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 33
Poder: 0
LuisMiguel Va por buen camino
Saludos amigos, el problema lo resolvi, no creo que sea la forma mas optima pero al menos trabaja, si alguien me da una mejor sera bienvenida.
Código:
   String Nombre = nombre->Text;
   String Proteinas = proteinas->Text;
   String Carbohidratos = carbohidratos->Text;
   String Grasas = grasas->Text;
   String Fibra = fibra->Text;
   String Nombregrano="'"+ Nombre +"'";
   //buscar a ver si existe el Grano
   Form3->GuardarPorcentajes->Close();
   Form3->GuardarPorcentajes->SQL->Clear();
   String Consulta = "SELECT *  FROM granosporcentajes where granosporcentajes.Nombre="+Nombregrano;
   Form3->GuardarPorcentajes->SQL->Add(Consulta);
   Form3->GuardarPorcentajes->Open();
   String NombreEcontrado=Form3->GuardarPorcentajes->FieldByName("idGrano")->Value;
Primero el nombre que recibo de
Código:
String Nombre = nombre->Text;
lo pongo dentro de dos comillas simples
Código:
 String Nombregrano="'"+ Nombre +"'";
Y elimino la parte de
Código:
 Form3->GuardarPorcentajes->Parameters->ParamByName("Nombre")->Value=Nombre;
Responder Con Cita
  #3  
Antiguo 12-08-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola LuisMiguel.

Aunque no mencionas los componentes que usas para conectarte, infiero por Parameters que son ADO. Si es así, este código tendría que funcionarte sin problemas:
Código:
{
   TADOQuery *Qry = static_cast<TADOQuery*>(Form3->GuardarPorcentajes);
   ...
   Qry->Close();
   Qry->SQL->Clear();
   Qry->SQL->Add("SELECT * FROM GRANOSPORCENTAJES ");
   Qry->SQL->Add("WHERE NAME= :PGRANO");
   Qry->Parameters->ParamByName("PGRANO")->Value = Nombregrano;
   Qry->Open();
   ...
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 13-08-2012
LuisMiguel LuisMiguel is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 33
Poder: 0
LuisMiguel Va por buen camino
Saludos ecfisa
Los componentes que usé fueron ADO.
De la forma que usted me dice lo probe varias veces y no me funcionó, me da los errores que mencioné al principio.
Gracias por responder
Responder Con Cita
  #5  
Antiguo 13-08-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola LuisMiguel.

No se que puede estar sucediendo...

De todos modos, dejando de lado la seguridad (Inyección SQL), el código
Código:
  String Nombre = nombre->Text;
  String Nombregrano="'"+ Nombre +"'";
  ...
  String Consulta = "SELECT *  FROM granosporcentajes where granosporcentajes.Nombre="+Nombregrano;
  ...
  ...->SQL->Add(Consulta);
funciona del mismo modo que con parámetros.


Si bién se podría ahorrar código de este modo:
Código:
  ...
  ...->SQL->Text = "SELECT *  FROM granosporcentajes where granosporcentajes.Nombre="  + QuotedStr(nombre->Text);
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 13-08-2012
LuisMiguel LuisMiguel is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 33
Poder: 0
LuisMiguel Va por buen camino
Saludos ecfisa
Gracias por la aclaración, no sabia eso de QuotedStr. En el caso de la seguridad como podría proteger el código contra la Inyección SQL, lo he hecho en php pero en C++ no.
Responder Con Cita
  #7  
Antiguo 13-08-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por LuisMiguel Ver Mensaje
Saludos ecfisa
Gracias por la aclaración, no sabia eso de QuotedStr. En el caso de la seguridad como podría proteger el código contra la Inyección SQL, lo he hecho en php pero en C++ no.
Hola LuisMiguel.

Se evita totalmente con el uso de parámetros.

No sé por que no te esta funcionando con parámetros, tal vez sean versiones... no sé. Te convendría exponer el problema (de MySQL con ADO) en el foro de MySQL donde seguramente encuentres respuesta.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 13-08-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 ecfisa Ver Mensaje
No sé por que no te esta funcionando con parámetros,
No estoy muy seguro, pero creo que se debe a que en ADO, a diferencia de otros componentes similares, el objeto Parameter no tiene propiedades del tipo AsString, AsInteger, etc. así que los valores se pasan mediante el variant Parameter.Value. Supongo que por eso, ADO pasa el valor tal cual sin encerrar el valor entre comillas.

Si no mal recuerdo, eso se solventa especificando explícitamente el tipo de datos del parámetro con Parameter.DataType (en este caso sería ftString).

Por otra parte, uno de los intentos de LuisMiguel

Código:
Form3->GuardarPorcentajes->SQL->Add("SELECT  granosporcentajes.Nombre FROM granosporcentajes where  Nombre='Nombre');
que le dió por error:

Cita:
Parameter'Nombre' not found'
puede deberse a que faltaron los dos puntos:

Código:
Form3->GuardarPorcentajes->SQL->Add("SELECT  granosporcentajes.Nombre FROM granosporcentajes where  Nombre=':Nombre');

Quizá, así sí funcione.

// Saludos
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Duda con conexion ODBC a MySQL dmartinezn C++ Builder 8 20-01-2012 18:28:33
Duda con conexión a mySql radenf Conexión con bases de datos 2 06-02-2009 00:58:14
Duda acerca de conexion remota a MySQL diegofhernando MySQL 3 28-08-2007 03:17:53
Duda PHP+PDF+MySQL Romina A. PHP 4 03-08-2007 00:01:02
duda con una consulta LIKE en MySQL enecumene MySQL 6 06-02-2007 21:06:46


La franja horaria es GMT +2. Ahora son las 04:33:34.


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