[Kde-devel-es] Seguimos con el qt y msql...

jc.santosruiz at wanadoo.es jc.santosruiz at wanadoo.es
Thu Apr 15 09:38:27 CEST 2004


>Hola lista, os vengo otra vez a dar la vara con el

>mysql y el qt...

>Bueno el ejemplo que me mando el otro dia jose carlos,

>pues me da este error:

>unnamed1.h: En function `void enciendethread()':

>unnamed1.h:22: operadores inválidos de tipos `const

>char[30]' y `float' para

>  el binario `operator+'



Yo diría que has intentado sumar un caracter con un número en coma flotante...



>unnamed1.h:22: error de decodificación antes de una

>constante de cadena

>unnamed1.h:22: aviso: variable `QSqlQuery consulta'

>sin uso

>main.cpp: En la función `void* thread(void*)':

>main.cpp:8: aviso: parámetro `void*threadid' sin uso

>make: *** [.obj/main.o] Error 1

>Y el codigo que hace ese error es el siguiente:

>void enciendethread(void)

>{

>  

>       float hola=0.03234;

>   QSqlDatabase

>*defaultDB=QSqlDatabase::addDatabase("QMYSQL3");

>   defaultDB-> setDatabaseName("pruebadatos");

>   defaultDB->setUserName("fernando");

>   defaultDB->setPassword("hola");

>   defaultDB->open();

>   QSqlQuery target;

>             

>   target.exec("create table simulation( x, y);");



Vale, aquí te falta decir de qué tipo son las variables x e y, imprescindible a la hora de crear una tabla.

TE sugiero que pruebes los comandos sql antes de meterlos en el programa, para asegurarte de que 

están bien.





>   target.exec("insert into simulation

>values('0.052',1');"); //Asi de esta forma se hacerlo,



Vale, de momento a esto ('0.052',1') le falta un '.  Y si no son caracteres, sino números, no hace falta que pongas

ningún '. Sería INSERT INTO simulation VALUES (0.052, 1);

Por lo demás, hay varias formas para hacer lo que quieres. Puedes usar una string del siguiente modo:

QSqlString cadena="INSERT INTO simulation VALUES ("+numero1+", "+numero2+");"

La forma es bastante cutre, pero funciona. Otra mucho más elegante sería algo así:



target.prepare ("INSERT INTO simulation (x, y) VALUES (:x, :y)");

target.bindValue(":x", variable_que_contiene_el_valor_x);

target.bindValue(":y", variable_que_contiene_el_valor_y);

if (!target.exec()) KMesageBox::detailedError(this, "No se ha podido realizar la consulta.", target.lastError());



Ojo, pq yo uso postgresql, y aunque se supone que las Qt hacen que cualquier forma valga para cualquier base de datos, para Postgresql no me funciona el ":x", sino poner 



target.prepare ("INSERT INTO simulation (x, y) VALUES (?, ?)");

target.bindValue(1, variable_que_contiene_el_valor_x);

target.bindValue(2, variable_que_contiene_el_valor_y);

if (!target.exec()) KMesageBox::detailedError(this, "No se ha podido realizar la consulta.", target.lastError());



Que simplemente es otra forma de hacer lo mismo.



>ahora como meto

>   //la variable hola, por ejemplo en la parte de la

>tabla x????



Espero que te haya quedado claro. EN cualquier caso, insisto, yo no creo que los errores que te da al compilar sea por el acceso a la base de datos



>Alguien me puede exar una mano??

>Muxas gracias!!!!



More information about the Kde-devel-es mailing list