Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Разработка баз данных _ работа firebird embedded

Автор: vanvo 21.3.2009, 15:33

На компе, где стоит сервер программа работает. При переносе на ноут (на котором сервера firebird нет) программа не работает. Распаковываю Firebird-2.1.1.17910-0_Win32_embed в папку с программой, fbembed.dll переименовываю на fbclient.dll (потом пытался и на gds32.dll). В программе убираю строку setHostName(...). Программа все равно не работает. Что еще я забыл сделать, подскажите...
Хм... Ставлю на комп embedded, выключаю сервер, программа работает. Значит каких-то либов не хватает...

Автор: SABROG 21.3.2009, 15:37

Скачай http://www.dependencywalker.com/, через него запускай программу, он тебе выведет чего не хватает.

Автор: vanvo 21.3.2009, 15:56

С помощью Dependency Walker узнал, что не хватает msjava.dll, ее добавил с компа. Но еще ругается на mpr.dll. Красным подсвечивает функцию WNetRestoreConnectionA (Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module). Пробовал заменить dll с компа, не помогло :(
На компе с выключенным сервером и firebird embedded Dependency Walker выдает ту же ошибку, но программа все-равно работает...
Хм... Папка с программой, бд и всеми дллками была на рабочем столе - не работало, перенес в мои документы - заработало... В чем разница? :)

Автор: SABROG 21.3.2009, 17:30

Вполне может быть, что из-за русского названия "Рабочий стол", либо из-за пробелов. Хотя, если честно, то я не наблюдал, чтобы Qt на этом спотыкалась. А вообще бывают необязательные .dllки. Я кстати так остатки вируса нашел на компьютере, когда увидел, что kernel32.dll требует странную .dll. Погуглив понял, что требуемая .dll - часть вируса. Не знаю почему, но антивирусы зависимость не вылечили, но .dll удалили. По сути если её туда спецом воткнуть, то она активизируется.

Автор: vanvo 12.4.2009, 15:40

Оказывается не все так просто... На некоторых машинах программа со встроенным сервером жар-птицы работает нормально, на некоторых бд не открывается. Результаты Dependency одинаковые: везде нет mpr.dll. Но как бы наличие этой дллки не критично (в ФАКе оффсайта Dependency вроде прочитал). В чем можт быть еще причина?

Почему теперь на форуме нельзя исправлять первый пост в теме? И не только первый...

Автор: Litkevich Yuriy 12.4.2009, 15:56

Цитата(vanvo @ 12.4.2009, 19:40) *
И не только первый...
однако ты этот пост исправил

Автор: vanvo 12.4.2009, 15:59

Цитата(Litkevich Yuriy @ 12.4.2009, 16:56) *
однако ты этот пост исправил

У меня только на этом посте (из всех моих на форуме) есть кнопка "изменить".
Теперь и на этом тоже. Почему то прошлые мои посты форум не хочет относить ко мне :)

Автор: Litkevich Yuriy 12.4.2009, 16:12

Цитата(vanvo @ 12.4.2009, 19:59) *
Почему то прошлые мои посты форум не хочет относить ко мне
пиши http://www.forum.crossplatform.ru/index.php?showtopic=1229, админам.

Автор: vanvo 12.4.2009, 19:22

Litkevich Yuriy, а по поводу моей проблемы никаких идей нет?

Автор: Litkevich Yuriy 12.4.2009, 19:50

vanvo, я со встраваемым птицем ещё не сталкивался.

Цитата(vanvo @ 21.3.2009, 19:33) *
На компе, где стоит сервер программа работает. При переносе на ноут (на котором сервера firebird нет) программа не работает.
там где нет сервера, у тебя БД лежит? или БД в другом месте? Т.е. Встраиваемый Птиц в действительности должен выполнять роль клиента или сервера?

Автор: vanvo 12.4.2009, 20:04

Цитата(Litkevich Yuriy @ 12.4.2009, 20:50) *
там где нет сервера, у тебя БД лежит? или БД в другом месте? Т.е. Встраиваемый Птиц в действительности должен выполнять роль клиента или сервера?

Этот вопрос я решил недостающими либами. Новый вопрос находится в середине темы, а именно:
Цитата(vanvo @ 12.4.2009, 16:40) *
На некоторых машинах программа со встроенным сервером жар-птицы работает нормально, на некоторых бд не открывается. Результаты Dependency одинаковые: везде нет mpr.dll. Но как бы наличие этой дллки не критично (в ФАКе оффсайта Dependency вроде прочитал). В чем можт быть еще причина?

П.С. Еще прошу, если возможно, убрать пометку [решено] у темы.

Автор: Litkevich Yuriy 12.4.2009, 20:56

Цитата(vanvo @ 13.4.2009, 0:04) *
на некоторых бд не открывается.
ну а всякие сообщения об ошибках ты записываешь? что говорит птиц?
И к стати как ты его используешь? через драйвер Qt?

Автор: vanvo 13.4.2009, 12:16

Вывд ошибки сделал недавно, посмотрю, что он выдаст на неработающих машинах. Птицу использую через драйвер Qt

QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE");
и погнали :)
Вывод ошибки должен выглядеть примерно так:
QMessageBox::critical(this, tr("Attention"), db.lastError().databaseText() +  "\n" + db.lastError().driverText());
?

Автор: Litkevich Yuriy 13.4.2009, 12:26

Цитата(vanvo @ 13.4.2009, 16:16) *
Вывод ошибки должен выглядеть примерно так:
ну и как же она выглядит эта ошибка? От кода программы мне толку никакого.

Автор: vanvo 13.4.2009, 13:19

Цитата(Litkevich Yuriy @ 13.4.2009, 13:26) *
ну и как же она выглядит эта ошибка?

Цитата(vanvo @ 13.4.2009, 13:16) *
Вывд ошибки сделал недавно, посмотрю, что он выдаст на неработающих машинах.

Автор: vanvo 14.4.2009, 17:54

Цитата(vanvo @ 13.4.2009, 14:19) *
ну и как же она выглядит эта ошибка?

Driver not loaded

Автор: Litkevich Yuriy 14.4.2009, 17:57

Цитата(vanvo @ 14.4.2009, 21:54) *
Driver not loaded
вот это уже что-то. Драйвер QIbase, с собой таскаешь?

Автор: vanvo 14.4.2009, 18:06

Цитата(Litkevich Yuriy @ 14.4.2009, 18:57) *
Драйвер QIbase, с собой таскаешь?

Да, qsqlibase4.dll лежит в папке %ProgramDirectory%\sqldrivers

Автор: AD 14.4.2009, 18:11

Надо такой путь: <QtDirectory>\plugins\sqldrivers.
А еще не забыть написать в коде следующее:

QApplication a(argc, argv);
QDir dir(qApp -> applicationDirPath() + QDir::separator() + "plugins" + QDir::separator());
QStringList list_plugins;
list_plugins << dir.absolutePath() << a.libraryPaths();
a.setLibraryPaths(list_plugins);

Автор: vanvo 14.4.2009, 18:39

Цитата(AD @ 14.4.2009, 19:11) *
Надо такой путь: <QtDirectory>\plugins\sqldrivers.

qsqlibase4.dll тоже там лежит. Я имею ввиду при переносе программы на компьютер без Qt qsqlibase4.dll лежит в %ProgramDirectory%\sqldrivers
А почему в коде надо писать "plugins", а не "sqldrivers"?

Автор: molchanoviv 14.4.2009, 19:13

почитай http://wiki.crossplatform.ru/index.php/Развертывание_приложений_Qt_в_MS_Windows

Автор: vanvo 14.4.2009, 19:57

molchanoviv, я всегда дллку для работы с бд клал просто в папку %ProgramDirectory%\sqldrivers и никаких проблем не возникало...

Автор: AD 14.4.2009, 20:17

Цитата
qsqlibase4.dll тоже там лежит. Я имею ввиду при переносе программы на компьютер без Qt qsqlibase4.dll лежит в %ProgramDirectory%\sqldrivers
А почему в коде надо писать "plugins", а не "sqldrivers"?

Я имел в виду, что <QtDirecory> - это собственно папка, где находится ваш exe-файл. Название неудачное подобрал. Попробуйте так, как я прописал. Что-то там вшито в само Qt!!!!

Автор: vanvo 14.4.2009, 20:34

molchanoviv, AD, спасибо. Завтра проверю на "чистых" машинах.

Автор: vanvo 15.4.2009, 15:31

Все работает! Большое спасибо всем, кто мне помогал :)

Автор: Litkevich Yuriy 15.4.2009, 15:55

Цитата(vanvo @ 15.4.2009, 19:31) *
Все работает! Большое спасибо всем, кто мне помогал
и в чём в итоге было дело, как решил проблему?

Автор: vanvo 15.4.2009, 20:01

Этим:

   QStringList list_path;    
    QDir dir = QDir(app.applicationDirPath()+"/QtPlugins/");    
    list_path << dir.absolutePath () << app.libraryPaths ();    
    app.setLibraryPaths( list_path  );

Только вопрос остался: почему на некоторых машинах и без этого кода драйвер нормально находится?

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)