FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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; Código:
Form3->GuardarPorcentajes->SQL->Add("SELECT granosporcentajes.Nombre FROM granosporcentajes where Nombre=:Nombre"); Lo cambie para Código:
Form3->GuardarPorcentajes->SQL->Add("SELECT granosporcentajes.Nombre FROM granosporcentajes where Nombre='Nombre'); Código:
Form3->GuardarPorcentajes->Parameters->ParamByName("Nombre")->Value=Nombre; 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; |
#2
|
|||
|
|||
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; Código:
String Nombre = nombre->Text; Código:
String Nombregrano="'"+ Nombre +"'"; Código:
Form3->GuardarPorcentajes->Parameters->ParamByName("Nombre")->Value=Nombre; |
#3
|
||||
|
||||
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(); ...
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#5
|
||||
|
||||
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); 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);
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#6
|
|||
|
|||
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. |
#7
|
||||
|
||||
Cita:
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 .... |
#8
|
||||
|
||||
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'); Cita:
Código:
Form3->GuardarPorcentajes->SQL->Add("SELECT granosporcentajes.Nombre FROM granosporcentajes where Nombre=':Nombre'); Quizá, así sí funcione. // Saludos |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
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 |
|