Версия для печати темы
Форум на 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)