Russian Qt Forum
Ноябрь 24, 2024, 08:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Не работает SQLite на других машинах  (Прочитано 25822 раз)
SABROG
Гость
« Ответ #15 : Январь 31, 2010, 19:29 »

Для начала включи в проекте (.pro) консоль (CONFIG += console). Собери в debug варианте. Проверь работоспособность на другом компьютере. Если в консоль будет что-то писаться - копируй на форум. Если нет - временно переименуй папку с Qt на рабочей машине, например было c:\qt-everywhere-opensource-src-4.6.1 а стало c:\_qt-everywhere-opensource-src-4.6.1
После этого проверь работоспособность программы на рабочей машине. Если не работает, то дело в плагинах, если работает и в консоль ничего не пишет, то прикрепляй исходники своей программы здесь, чтобы я мог их собрать, будем разбираться.

С QObject::tr() ты береборщил. Сомневаюсь, что Шлее мог такое написать в книге. Вероятно эта та часть, которая не "под кальку". Ты уверен, что хочешь, чтобы пользователи твоей программы переводя программу на их родной язык перевели такие вещи как "SQLITE", "пароль для базы", "логин для базы", "имя компьютера" на какой нибудь чешский язык? После чего естественно ни сама база SQLITE открываться не будет, ни пароль с логином к ней подходить тоже не будут, т.к. всё будет на чешском. Далее ты пишешь ошибку по-русски в Messages::showError(). Если я являюсь мексиканцем, который кроме родного испанского и американского не знает ни слова по-русски, как мне перевести твою ошибку на родной язык, если кроме иероглифов на русском я ничего не вижу. Возьми за правило в исходниках писать только на английском, в том числе и комментарии. Весь интерфейс изначально надо проектировать на английском.
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #16 : Февраль 01, 2010, 00:11 »

Весь интерфейс изначально надо проектировать на английском.
нафига козе боян? если для русских пишется. у английцев своих писателей полно..
этот твой совет явный перегиб, а может быть и прогиб.
« Последнее редактирование: Февраль 01, 2010, 00:13 от panAlexey » Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
SABROG
Гость
« Ответ #17 : Февраль 01, 2010, 00:57 »

Весь интерфейс изначально надо проектировать на английском.
нафига козе боян? если для русских пишется. у английцев своих писателей полно..
этот твой совет явный перегиб, а может быть и прогиб.

Ну и понапишет такой русский для русского, только один на KOI8-R, второй в Windows-cp1251, а третий в cp866. И будут они иероглифы наблюдать под разными локалями. Вот тебе спасибо скажут. К тому же в Linux могут быть проблемы с русским шрифтом, пока грамотно не настроишь ОС под себя. Я это не однократно замечал. И если бы программа была изначально на английском, то я бы хоть как-то с ней мог бы работать. К тому же многие компьютерные термины гораздо понятней на английском языке, чем их не понятный перевод на русском. Ориентироваться надо на весь мир, а не на конкретного потребителя. Сегодня ты пишешь простой чат, чтобы с соседом переписываться, а завтра это уже полноценный DirectConnect клиент, которым пользуется весь мир.
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #18 : Февраль 01, 2010, 12:57 »

Весь интерфейс изначально надо проектировать на английском.
нафига козе боян? если для русских пишется. у английцев своих писателей полно..
этот твой совет явный перегиб, а может быть и прогиб.
Ну и понапишет такой русский для русского, только один на KOI8-R, второй в Windows-cp1251, а третий в cp866. И будут они иероглифы наблюдать под разными локалями. Вот тебе спасибо скажут. К тому же в Linux могут быть проблемы с русским шрифтом, пока грамотно не настроишь ОС под себя. Я это не однократно замечал. И если бы программа была изначально на английском, то я бы хоть как-то с ней мог бы работать. К тому же многие компьютерные термины гораздо понятней на английском языке, чем их не понятный перевод на русском. Ориентироваться надо на весь мир, а не на конкретного потребителя. Сегодня ты пишешь простой чат, чтобы с соседом переписываться, а завтра это уже полноценный DirectConnect клиент, которым пользуется весь мир.
т.е. просто для того, что-бы избежать кракозябр под разными локалями?
Хм. это дельный совЬет.
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« Ответ #19 : Февраль 02, 2010, 07:17 »

Для начала включи в проекте (.pro) консоль (CONFIG += console). Собери в debug варианте. Проверь работоспособность на другом компьютере. Если в консоль будет что-то писаться - копируй на форум. Если нет - временно переименуй папку с Qt на рабочей машине, например было c:\qt-everywhere-opensource-src-4.6.1 а стало c:\_qt-everywhere-opensource-src-4.6.1
После этого проверь работоспособность программы на рабочей машине. Если не работает, то дело в плагинах, если работает и в консоль ничего не пишет, то прикрепляй исходники своей программы здесь, чтобы я мог их собрать, будем разбираться.

Спасибо, попробую! Собственно, сразу со второго пункта - переименования папки. :-)

Цитировать
С QObject::tr() ты береборщил. Сомневаюсь, что Шлее мог такое написать в книге. Вероятно эта та часть, которая не "под кальку". Ты уверен, что хочешь, чтобы пользователи твоей программы переводя программу на их родной язык перевели такие вещи как "SQLITE", "пароль для базы", "логин для базы", "имя компьютера" на какой нибудь чешский язык? После чего естественно ни сама база SQLITE открываться не будет, ни пароль с логином к ней подходить тоже не будут, т.к. всё будет на чешском. Далее ты пишешь ошибку по-русски в Messages::showError(). Если я являюсь мексиканцем, который кроме родного испанского и американского не знает ни слова по-русски, как мне перевести твою ошибку на родной язык, если кроме иероглифов на русском я ничего не вижу. Возьми за правило в исходниках писать только на английском, в том числе и комментарии. Весь интерфейс изначально надо проектировать на английском.
Дело в том, что это не коммерческий продукт на продажу, и не разработка для очень третьих лиц, а утилита для двух-трех человек, которые занимаются целенаправленным парсингом по заданной мною же, известной заранее и практически не расширяемой теме. Они сидят в Москве, и кроме русского, других языков не знают. Английский - условно. У них установлена русская винда, русские шрифты, русские раскладки и таблицы символов. У Шлее, конечно, этого нет - я вставил QObject::tr исключительно для простоты дальнейшей коммуникации с пользователями, если выскакивает ошибка (что, собственно, и произошло). Чтобы не приходилось получать от них английскую ошибку по буквам.
Записан

Эвтаназия - наше хобби!
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« Ответ #20 : Февраль 02, 2010, 11:20 »

Все сходится. "Ребеночек не наш" (с)  Смеющийся
После переименования папки Qt (а точнее, папки plugins в ней) ошибка стала вылезать и на основной машине. Ей нужен этот плагин. Плагин в папке рядом с собой она не хочет. Вероятнее всего, путь к нему прошит в экзешнике явным образом.
Записан

Эвтаназия - наше хобби!
z11t3
Гость
« Ответ #21 : Февраль 08, 2010, 07:06 »

у меня правда плагинами используется.. и qt 4.5.0 интегрирован под VS2008
Код
C++ (Qt)
int main(int argc, char *argv[])
{
 
....
QCoreApplication application(argc, argv);
QStringList list_path;
QDir dir =QDir(application.applicationDirPath()+"//plugins//");
list_path << dir.absolutePath() << application.libraryPaths();
application.setLibraryPaths(list_path); //где искать плагины
 

\Qt\4.5.0\bin и
\Qt\4.5.0\plugins
B одной из этих дир драйвера и dll для запуска проекта из под вижул студии, а во второй рантайм (в том числе дебажные) для переезда на другие машины.. я очень долго плясал с бубном пока это не выяснил
UPD.. моя история
я комплил qt 2 часа с "нужными" ключами для odbs драйвера - не помогло
таскал вручную манифесты из %windir%\sxs пачками
надыбал пакет дестрибутизации для MSVC 2008
разбросал драйвера гроздьями по всей системе
настроил удаленный дебаг чтобы прочитать строчки
>'csarchiver.exe': Loaded 'C:\#Gorod\plugins\sqldrivers\qsqlodbc4.dll', Binary was not built with debug information.
>'csarchiver.exe': Unloaded 'C:\#Gorod\plugins\sqldrivers\qsqlodbc4.dll'
убедившись что драйвера то те.. но непригодны
только тупое перечитывание доки qt от безисходности на английском привело меня к пониманию что под винду нужно самостоятельно выполнить две комманды
>>cd %QTDIR%\src\plugins\sqldrivers\odbc
>> qmake odbc.pro
>> nmake
под версию 4.5.0
 
Говорила мне мама -"Учи сына английский" =)
« Последнее редактирование: Февраль 08, 2010, 07:14 от z11t3 » Записан
red5
Гость
« Ответ #22 : Март 24, 2010, 01:25 »

Здравствуйте. Столкнулся с такой же проблемой.
Не увидел здесь чёткого ответа, поэтому пришлось находить решение методом проб.
Хочу описать решение этой проблемы подробнее, вдруг кому пригодится.
Моя конфигурация:
  Qt SDK for Windows (ver. 2010.01 лицензия LGPL), Qt Creator 1.3.1, MinGW, WinXP SP3
  Приложение собрано в release (CONFIG+=release).

Симптом: не открывается база данных на ПК, где не установлена QT.
Код:
bool ok = db.open(); // Если не находит плагин qsqlite4.dll, то возвращает false

Для того, чтобы приложение, которое использует плагин
C:\Qt\2010.01\qt\plugins\sqldrivers\qsqlite4.dll
загружало его на ПК, на котором не установлено QT той же версии с которым было собрано приложение, требуется:
1) В исходном тексте программы добавить путь, как показано ниже:
Код:
qApp->addLibraryPath(QString("./plugins/")); // без этой строки база данных не откроется
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

2) Структура папок запускаемого приложения должна быть следующей:
MyApp/myApp.exe
MyApp/QtCore4.dll
MyApp/mingwm10.dll
MyApp/Все_остальные_используемые_библиотеки (но не плагины)
MyApp/plugins/sqldrivers/qsqlite4.dll (плагин для работы с sqlite)

Я так понял, что остаток пути до библиотеки (/sqldrivers/qsqlite4.dll) прописан где-то жёстко в самой библиотеке QT.
Наверное, с остальными плагинами аналогично. Под плагинами я понимаю те dll, которые хранятся в папке C:\Qt\2010.01\qt\plugins\

В *.pro файле в LIBS плагин -lqsqlite4  я не указывал.
Плагин я не пересобирал.
Ни какие другие настройки специально не менял.
Записан
DOOMer
Чайник
*
Offline Offline

Сообщений: 95



Просмотр профиля
« Ответ #23 : Апрель 06, 2010, 08:10 »

Попробуйте передавать в качестве параметра методу  addLibrary() полный путь до каталога с плагинами:

Код
C++ (Qt)
qApp->addLibraryPath(qApp->applicationDirPath() + QString("/plugins/"));
Записан

Linux x86_64 && Qt 5.4.0 && Qt 4.8.6t && GCC 4.9.2
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #24 : Апрель 06, 2010, 09:05 »

Переведённая цитата из асистента:
Цитировать
Qt не найдет подключаемые модули, если они не хранятся в правильном каталоге.
...
Но где находится каталог plugins? Когда приложение запущено, Qt сначала просматривает каталог исполняемого файла приложения в качестве pluginsbase. Например, если приложение находится в C:\Program Files\MyApp и имеет подключаемый модуль стиля, Qt будет искать в C:\Program Files\MyApp\styles.
Записан

Юра.
vasist
Гость
« Ответ #25 : Апрель 24, 2010, 18:20 »

Вот минут 20 назад столкнулся с подобной проблемой, спасибо вам всем большое, благодаря вашим постам всё решилось моментально Подмигивающий
отдельная благодарность SASA именно его структура файлов показала куда нужно библиотеки класть Показает язык
Записан
radislav72
Гость
« Ответ #26 : Май 18, 2010, 05:39 »

Добавлю небольшой нюанс: red5 все правильно написал (спасибо Улыбающийся), но пункта 1 с вызовом addLibraryPath можно избежать:
Код:
qApp->addLibraryPath(QString("./plugins/")); // без этой строки база данных не откроется

Для етого нужно плагины поместить в папку sqldrivers в папке приложения. Как писал lit-uriy
Цитировать
Qt сначала просматривает каталог исполняемого файла приложения в качестве pluginsbase. Например, если приложение находится в C:\Program Files\MyApp и имеет подключаемый модуль стиля, Qt будет искать в C:\Program Files\MyApp\styles
А для плагинов-драйверов таким каталогом является sqldrivers.

Проверено на драйверах PostgreSQL.
Записан
Drafter
Гость
« Ответ #27 : Август 05, 2010, 17:31 »

Мда, тоже долго мучился, матерился, плевался, хотя и делал всё, как сказали выше.
Оказалось, что в папку ./sqldrivers скопировал плагин qsqlite4.dll не из того места. Надо копировать именно из <QtDir>\qt\plugins\sqldrivers, а не из <QtDir>\bin\sqldrivers, например. Улыбающийся
Записан
mc-black
Гость
« Ответ #28 : Август 18, 2010, 13:00 »

Я конечно еще ламер в Qt, но даже мне очевидно, что дистрибутиву не хватает dll для работы sqlite, так как коммерческая версия Qt в силу лицензии sqlite не должна линковать ее статически. Просто надо положить dll в одну папку с exe.
Записан
crossly
Гость
« Ответ #29 : Август 18, 2010, 14:58 »

вам не правильно очевидно.... дело в том что он подложил плагин собранный другим компилятором...
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.095 секунд. Запросов: 23.