2011-03-01 15 views
17

Estoy usando el complemento QT VS2008 & para hacer mi aplicación. Después de hacer paquete cuando estoy ejecutando la aplicación que estoy recibiendo de error:Controlador QSQLITE no cargado: dónde poner los complementos del controlador de la base de datos qt

QSqlDatabase: QSQLITE driver not loaded 
QSqlDatabase: available drivers: 
Database error: QSqlError(-1, "Driver not loaded", "Driver not loaded") 
QSqlError(-1, "Driver not loaded", "Driver not loaded") 

He añadido el qsqlite.dll a mi paquete & también cambió la libpath. Pero aún estoy recibiendo este error. Cómo resolver esto

Mi Código ::

QStringList str; 
str.append("."); 
a.setLibraryPaths(str); 
a.addLibraryPath("./sqldrivers/"); 

//a.addLibraryPath("."); 

qDebug()<<"my library path : "<<a.libraryPaths(); 

QLibrary sqlib("qsqlite4.dll"); 
sqlib.load(); 
qDebug()<<"my library loaded"<<sqlib.isLoaded(); 

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
qDebug()<<"Database error:"<<db.lastError(); 

db.setDatabaseName("vimukti1234"); 
qDebug()<< db.lastError(); 

db.open(); 
QSqlQuery query; 
+0

ahora puedo construir en VS con éxito. Y también estoy creando un paquete de controladores pero la base de datos aún no funciona en otro sistema –

Respuesta

30

Los conductores deben ser colocados bajo "sqldrivers", no en el mismo directorio que el archivo ejecutable (que se cargan en tiempo de ejecución, y Qt mira para ellos en "sqldrivers") Una estructura típica de una de nuestras aplicaciones instaladas es así:

.: 
total 26616 
-rwxr-xr-x 1 root root 2245632 Sep 29 03:53 AlvaEditor.exe 
-rwxr-xr-x 1 root root 2335232 Sep 29 03:53 QtCore4.dll 
-rwxr-xr-x 1 root root 8421376 Sep 29 03:53 QtGui4.dll 
-rwxr-xr-x 1 root root 199168 Sep 29 03:53 QtSql4.dll 
-rwxr-xr-x 1 root root 306688 Sep 29 03:53 libctemplate.dll 
-rwxr-xr-x 1 root root 26624 Sep 29 03:53 qgif4.dll 
-rwxr-xr-x 1 root root 28672 Sep 29 03:53 qico4.dll 
-rwxr-xr-x 1 root root 200704 Sep 29 03:53 qjpeg4.dll 
-rwxr-xr-x 1 root root 222720 Sep 29 03:53 qmng4.dll 
-rwxr-xr-x 1 root root 439808 Sep 29 03:53 qsqlite4.dll 
-rwxr-xr-x 1 root root 21504 Sep 29 03:53 qsvg4.dll 
-rwxr-xr-x 1 root root 287232 Sep 29 03:53 qtiff4.dll 
drwxr-xr-x 2 root root 4096 Sep 29 03:53 sqldrivers 

./sqldrivers: 
total 432 
-rwxr-xr-x 1 root root 439808 Sep 29 03:53 qsqlite4.dll 
+0

+1 ¡Gracias, gracias, gracias, gracias! Estuve aturdido por esto toda la noche. –

+0

Esto también me ayudó. Olvidé que tenía que incluir a los sqldrivers y pasé siglos preguntándome por qué mis desarrolladores de versiones no funcionaban. Cheers +1 :) – T3CHN0CR4T

+0

Todavía no entiendo, ¿dónde deberían colocarse sqldrivers? – Liviu

0

probar este primero:

qDebug() << QSqlDatabase::drivers(); 

para comprobar los controladores disponibles.

3

Bueno, la función: addDatabase ("QSQLITE"); toma dos parámetros, el primero es el conductor y el segundo es el nombre de la conexión, (aprobada como QString)

Ahora, pruebe lo siguiente:

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "SQLITE"); 

Funcionó para mí, así que supongo Funcionará para usted. (Suponiendo SQLITE es uno de sus controladores instalados)

Puede comprobar si hay SQLITE por lo siguiente:

qDebug () << QSqlDatabase :: Drivers () ; 

Buena suerte!

Zaher J.G.

Cuestiones relacionadas