[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