Autor
|
Tema: insertar valor de la variable en mysql desde una aplicacion en c (Leído 6,327 veces)
|
txenfsm
Desconectado
Mensajes: 6
|
Hola amigos, estoy relizando una aplicacion en c que debe insertar valores de una variable en c, lo que realizo para ello es : sprintf(consulta, "INSERT INTO mitabla (campo1,campo2,campo3) VALUES('%s','%s','%s')",vble_cadena1, vble_caracter2, vble_enterolargo3); mysql_query(conn,consulta); bien pues al relizar estas lineas me da error y no se si es porque las variables no son del mismo tipo que lo son en la base de datos. ¿tiene algo que ver? Lo pregunto porque si en vez esas linea pongo:
sprintf(consulta, "INSERT INTO mitabla (campo1,campo2,campo3) VALUES('hola1','hola2','hola3')"); mysql_query(conn,consulta);
si que funciona. Espero que me podais ayudar porque no se donde tengo el fallo. gracias de antemano. Saludos
|
|
|
En línea
|
|
|
|
fabianjsm
|
Hola txenfsm.
Si los tipos de variable son los que el nombre sugiere deberías cambiar tus especificadores de formato. En vez de VALUES('%s','%s','%s') debería ser VALUES('%s','%c','%d'), así sprintf se leerá una cadena, un carácter y un entero:
sprintf(consulta, "INSERT INTO mitabla (campo1,campo2,campo3) VALUES('%s','%c','%d')",vble_cadena1, vble_caracter2, vble_enterolargo3);
|
|
|
En línea
|
|
|
|
txenfsm
Desconectado
Mensajes: 6
|
Hola fabianjsm , gracias por contestar. si bueno eso fue una errata xD. A lo que me refiero es que por ejemplo yo, la base de datos con la que trabajo tiene un campo fecha de tipo date, y en la aplicacion existe una variable fecha de tipo char, entonces al poner: sprintf(consulta, "INSERT INTO mitabla (nombre,dni,fecha) VALUES('%s','%s','%s')",nomb, id, fecha); y ejecutar la aplicacion me salta un error, por lo que no se si la sentenca esta bien? De nuevo gracias de antemano. Un saludo
|
|
|
En línea
|
|
|
|
fabianjsm
|
Hola txenfsm, estuve ausente del foro por unos cuantos meses! A esta altura espero que hayas solucionado tu problema, de no ser así, la expresión como la escribes sólo funcionara si las tres variables (nomb, id y fecha) son del tipo “const char *”. Si fecha es del tipo “char” y la demás variables son “const char *” debería ser así:
sprintf(consulta, "INSERT INTO mitabla (nombre,dni,fecha) VALUES('%s','%s','%c')",nomb, id, fecha);
|
|
|
En línea
|
|
|
|
Fire544
Desconectado
Mensajes: 85
"Escucha el sonido del 0, 1"
|
Hola txenfsm. Mira he posteado tu solucion en un post ya hace algunas semanas, no es recomendable formatear una entrada en sprintf() con %c si fecha es tipo date en MySQL, tendrias que utilizar %s, porque C puede manejar automaticamente los tipos date de MySQL como strings o cadenas, lo que no puede hacer es manejar datos muy largos de MySQL con %c es algo logicamente absurdo. Tu error puede ser por el paso incorrectos de argumentos a sprintf(), mira fijate: Puedes hacer lo siguiente mira: char fecha[10]; sprintf(consulta , "INSERT INTO nametable VALUES(%s)", fecha );
trata de fijarte en el post que publique mira: http://foro.elhacker.net/programacion_cc/base_de_datos_con_mysql_desde_c_excelente-t366557.0.htmlSuerte !!
|
|
« Última modificación: 26 Agosto 2012, 18:21 pm por Fire544 »
|
En línea
|
"Si enseñas a pezcar a un niño lo ayudas para toda la vida, si pezcas para alimentarlo lo ayudas por un momento".
|
|
|
fabianjsm
|
Estimado, lo escribo con ánimo de disipar la confusion. No comprendo a que se refiere con manejar datos muy largos de MySQL con %c. El especificador de formato "%c" indica que el parámetro debe ser tratado como char, y la biblia del C (K&R 2.2, tipos y tamaños de datos) dice que el char tiene el tamaño de byte, por ende eso es lo máximo que podrás menejar con %c, o ¿Puedes citar alguna arquitectura para la cual se implementó un compilador C con tipos de datos char de más de 8 bits? Por otra parte, C no puede manejar automaticamente los tipos datos DATE de MySQL. C trabaja con tipos de datos básicos. Demás esta esta aclaración, pero puede ser utilidad: En Unix y demás sistemas POSIX (probablemente en muchos otros sitemas no POSIX), time_t (tiene el mismo nombre en la libreria estándar del C) es un entero que representa la cantidad de segundos transcurridos desde la medianoche UTC del 1 de enero de 1970 sin contar los segundos itercalares ( http://es.wikipedia.org/wiki/Segundo_intercalar). Por ejemplo, el viernes 13 de febrero de 2009, exactamente a las 23:31:30 (UTC), el tiempo Unix se igualó a '1234567890' (Google celebró este momento con el doodle: "date +%s"). El formato de fecha y hora de MySQL es una cadena que sigue cualquiera de estos esquemas: YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD, o YYMMDD. Puedes utilizar las funciones UNIX_TIMESTAMP() y FROM_UNIXTIME() para convertir entre valores TIMESTAMP de MySQL y los de Unix. Utilizando tu ejemplo: char fecha[20]; time_t now = time(NULL); strftime(fecha, 20, "%Y-%m-%d %H:%M:%S", localtime(&now)); sprintf(consulta, "INSERT INTO nametable VALUES(%s)", fecha);
|
|
|
En línea
|
|
|
|
Fire544
Desconectado
Mensajes: 85
"Escucha el sonido del 0, 1"
|
Estimado, lo escribo con ánimo de disipar la confusion. No comprendo a que se refiere con manejar datos muy largos de MySQL con %c. El especificador de formato "%c" indica que el parámetro debe ser tratado como char, y la biblia del C (K&R 2.2, tipos y tamaños de datos) dice que el char tiene el tamaño de byte, por ende eso es lo máximo que podrás menejar con %c, o ¿Puedes citar alguna arquitectura para la cual se implementó un compilador C con tipos de datos char de más de 8 bits? Por otra parte, C no puede manejar automaticamente los tipos datos DATE de MySQL. C trabaja con tipos de datos básicos. Demás esta esta aclaración, pero puede ser utilidad: En Unix y demás sistemas POSIX (probablemente en muchos otros sitemas no POSIX), time_t (tiene el mismo nombre en la libreria estándar del C) es un entero que representa la cantidad de segundos transcurridos desde la medianoche UTC del 1 de enero de 1970 sin contar los segundos itercalares ( http://es.wikipedia.org/wiki/Segundo_intercalar). Por ejemplo, el viernes 13 de febrero de 2009, exactamente a las 23:31:30 (UTC), el tiempo Unix se igualó a '1234567890' (Google celebró este momento con el doodle: "date +%s"). El formato de fecha y hora de MySQL es una cadena que sigue cualquiera de estos esquemas: YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD, o YYMMDD. Puedes utilizar las funciones UNIX_TIMESTAMP() y FROM_UNIXTIME() para convertir entre valores TIMESTAMP de MySQL y los de Unix. Utilizando tu ejemplo: char fecha[20]; time_t now = time(NULL); strftime(fecha, 20, "%Y-%m-%d %H:%M:%S", localtime(&now)); sprintf(consulta, "INSERT INTO nametable VALUES(%s)", fecha); No no mira creo que estas erratico, tienes que poner mas atencion a tu lectura, en ningun momento hable de chars larrgo en un sentido de que soporte mas bytes, solamente que no puedes hacer que un vector de 50 o 20 bytes se pueda concatenar con un char de 8 bytes, que es lo que pasa en el caso de txenfsm. Solo eso quiero dejar claro, sino preguntale a txenfsm que si que le funciono ...
|
|
« Última modificación: 26 Agosto 2012, 23:50 pm por Fire544 »
|
En línea
|
"Si enseñas a pezcar a un niño lo ayudas para toda la vida, si pezcas para alimentarlo lo ayudas por un momento".
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Error al insertar valor registro desde bat
Scripting
|
dkmarley
|
8
|
7,383
|
24 Noviembre 2009, 12:25 pm
por bolivianito
|
|
|
Copiar aplicación con diferente valor de variable
.NET (C#, VB.NET, ASP)
|
chacKos
|
4
|
3,689
|
20 Marzo 2010, 16:41 pm
por 43H4FH44H45H4CH49H56H45H
|
|
|
Como Obtener valor de un textbox, desde un valor, hasta otro valor [VB6]
Programación Visual Basic
|
revenge1252
|
4
|
6,305
|
17 Julio 2012, 09:38 am
por BlackZeroX
|
|
|
Problema al insertar datos a MySQL desde C#
.NET (C#, VB.NET, ASP)
|
amjrey617
|
2
|
2,322
|
6 Octubre 2014, 21:38 pm
por .::IT::.
|
|
|
[?] Asignar valor recibido desde puerto COM a una variable c++
Programación C/C++
|
Algorithmer
|
1
|
2,142
|
19 Noviembre 2014, 12:17 pm
por Eternal Idol
|
|