Russian Qt Forum

Qt => Общие вопросы => Тема начата: zlatko от Ноябрь 28, 2005, 17:38



Название: Проблема со слешами
Отправлено: zlatko от Ноябрь 28, 2005, 17:38
На некоторых компах после запуска проги( везде стоят ХР проф ) в дебажном окне я вижу следующее:

Цитировать

Failed to load library C:/cardreader_28.11/sqldrivers/qsqlpsql.dll!
        Error code 126 - The specified module could not be found.

QSqlDatabase: QPSQL7 driver not loaded
Failed to load library C:/cardreader_28.11/sqldrivers/qsqlpsql.dll!
        Error code 126 - The specified module could not be found.

Failed to load library C:/cardreader_28.11/sqldrivers/qsqlpsql.dll!
        Error code 126 - The specified module could not be found.

QSqlDatabase: available drivers:
Can't connect to database!
Error -1: Driver not loaded Driver not loaded


Ну что и понятно поскольку слешы стоят не в ту сторону. Попробывал поменять ручками следующим кодом но не получилося....
Может кто-нить сталкивался с подобным ?

Код:


*******
 
  QString strPath;
  strPath = a.applicationDirPath();
  strPath.replace( '/', '\\');
  bool ret = QDir::setCurrent( strPath );
  a.setLibraryPaths( strPath );
 
  QSqlDatabase *pDB=NULL;
  pDB = QSqlDatabase::addDatabase("QPSQL7");

*******



использую кт 3.3.3


Название: Проблема со слешами
Отправлено: zlatko от Ноябрь 29, 2005, 12:14
хм проблема вроди в самой библиотеке...по крайней мере в анонсе к qt3.3.5 подобные вещы упоминаются....
может ктонить подскажет где скачать релиз по студію :roll:


Название: Проблема со слешами
Отправлено: Dendy от Ноябрь 29, 2005, 22:33
Мммм... Хочу сразу разочаровать: никакой

Код:
  strPath.replace( '/', '\\');


не поможет, ибо при загрузке плагина QDir() перевернёт слеши как ему подскажет голос свыше (как правильно для данной ОС/компиллера).

А проблема собсна не в слешах. Проблема с системой плагинов Qt4. Драйвера SQL в Qt4 реализованы плагинами, которые загружаются на лету по месту требования, а не линкуются с основным кодом.

Заходим в документацию, читаем следующее:

Цитировать
But where is the plugins directory? When the application is run, Qt will first treat the application's executable directory as the pluginsbase. For example if the application is in C:\Program Files\MyApp and has a style plugin, Qt will look in C:\Program Files\MyApp\styles


Цитировать
Qt will also look in the directory specified by QLibraryInfo::location(QLibraryInfo::PluginsPath), which typically is located in QTDIR/plugins


Другой способ: использоваться функции:
QCoreApplication::addLibraryPath() и QCoreApplication::setLibraryPaths()

Грубо говоря, чтобы не добавлять код в программу нужно поместить соответствующий плагин ( qsqlpsql.dll ) в папку: sqldrivers которая будет лежать точно рядом с исполняемым файлом.

Плагины найдёшь здесь: QTDIR/plugins

 :D


Название: Проблема со слешами
Отправлено: Dendy от Ноябрь 29, 2005, 23:10
P.S. В Qt 4.1 плагины можно слинковать статически и проблема отпадает сама собой.


Название: Проблема со слешами
Отправлено: zlatko от Ноябрь 30, 2005, 13:18
ты сам хоть понял суть проблемы? :D
-я использую qt 3  не qt 4
-папка sqldrivers у меня существует и там есть необходимые драйвера
-на одних компах идет нормально а на других выдает вышеперечисленные сообшения
-http://qtforum.org/thread.php?threadid=15442&sid=


Название: Проблема со слешами
Отправлено: Dendy от Ноябрь 30, 2005, 13:49
Уууупс.... оце тупанув...  :oops:  :D

Спробуй віддебажити процес завантаження плагинів. Якщо це робиться засібами Qt, то не повинно бути жодних проблем  :?


Название: Проблема со слешами
Отправлено: zlatko от Ноябрь 30, 2005, 16:24
це можна..але в мене таке враження шо якшо я поставлю на необхідний комп студію і кт то воно запрацює :roll: ( аналогічно із моїм комппом)
треба десь дістати кт 3.3.5