Russian Qt Forum

Qt => Базы данных => Тема начата: rudireg от Декабрь 11, 2016, 11:55



Название: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: rudireg от Декабрь 11, 2016, 11:55
Привет.
У меня стоит Qt 5.5.1 (MSVC 2013, 32 bit)
Хочу работать с Postgresql
Имею ошибку QSqlDatabase: QPSQL driver not loaded
Знаю что:
1) Для работы с SQLite ничего устанавливать не надо, все работает из коробки.
2) Для работы с MySQL необходимо устанавливать на компьютер базу данных MySQL +  Апаче + клиент phpmyadmin для удобства просмотра

Вопрос:  Нужно ли что-либо устанавливать для работы с Postgresql как например для MySQL ? Или же все будет работать без установок как в случае с SQLite ?
Ведь если программу писать для клиентов, то они же не будут идти на сайт базы данных и устанавливать предварительно целую базу данных.

Вопрос 2: Как я понял что в Qt 5.5  драйвер не нужно собирать? он уже в коробке?
Тогда почему  имею ошибку : QPSQL driver not loaded


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: PimenS от Декабрь 11, 2016, 12:01
Тогда почему  имею ошибку : QPSQL driver not loaded

Привет!

Не доступны библиотеки postgresql.


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: rudireg от Декабрь 11, 2016, 12:07
Вот мои либы для работы с базами
Где qsqlpsql.dll - это для работы с Postgresql ?

(http://images.vfl.ru/ii/1481447221/02ca094d/15290429.png)


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: PimenS от Декабрь 11, 2016, 12:16
Я имею ввиду библиотеки самого PostgreSQL. Такие как libpq.dll например.
А qsqlpsql.dll, да это плагин для работы с PostgreSQL, но без библиотек PostgreSQL он работать не будет.

PS. Проще всего на компе где пишется код, установить PostgreSQL (для тестов все равно понадобится). И прописать пути в Path до /bin и /lib PostgreSQL.


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: rudireg от Декабрь 11, 2016, 12:21
Я имею ввиду библиотеки самого PostgreSQL. Такие как libpq.dll например.
А qsqlpsql.dll, да это плагин для работы с PostgreSQL, но без библиотек PostgreSQL он работать не будет.

PS. Проще всего на компе где пишется код, установить PostgreSQL (для тестов все равно понадобится). И прописать пути в Path до /bin и /lib PostgreSQL.

А если я буду запускать программу на другом компьютере, то на другом компе нет нужды устанавливать PostgreSQL? Будет достаточно держать в папке с программой либы  libpq.dll  и все?


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: PimenS от Декабрь 11, 2016, 12:25
Да. Устанавливать не надо. В папке с программой от PostgreSQL нужны libpq.dll и еще несколько библиотек. 


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: rudireg от Декабрь 11, 2016, 12:37
А где взять libpq.dll  и другие... я установил PostgreSQL для Windows 32 разрядная.


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: PimenS от Декабрь 11, 2016, 12:45
В /bin или /lib

прописать пути в Path до /bin и /lib PostgreSQL.


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: rudireg от Декабрь 11, 2016, 13:10
В /bin или /lib

прописать пути в Path до /bin и /lib PostgreSQL.
Вы имеете ввиду системную переменную PATH операционной системы Windows?

Добавил
C:\Program Files (x86)\PostgreSQL\9.6\bin;C:\Program Files (x86)\PostgreSQL\9.6\lib;C:\Program Files (x86)\PostgreSQL\9.6\include

Ошибка осталась
QSqlDatabase: QPSQL driver not loaded


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: PimenS от Декабрь 11, 2016, 13:28
Вы запускаете проект из MSVC?


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: rudireg от Декабрь 11, 2016, 13:40
Вы запускаете проект из MSVC?
Да


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: PimenS от Декабрь 11, 2016, 13:46
Я с MSVC не пробовал работать. Может быть он не видит плагин qsqlpsql.dll

Попробуйте в main вывести qDebug() << QSqlDatabase::drivers();

какие драйвера видит qt?


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: rudireg от Декабрь 11, 2016, 13:54
Я с MSVC не пробовал работать. Может быть он не видит плагин qsqlpsql.dll

Попробуйте в main вывести qDebug() << QSqlDatabase::drivers();

какие драйвера видит qt?

("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: rudireg от Декабрь 11, 2016, 15:45
Перегрузил компьютер ошибка  более не возникла.
Но теперь появился другой вопрос.
При работе с SQLite  я мог сделать следующие настройки:

Код
C++ (Qt)
   QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", this->nameConnect);
   db.setDatabaseName(tableName);
   db.setHostName("127.0.0.1");
   db.setUserName("rudi");
   db.setPassword("rudi");
 
Я мог указать любое имя пользователя и пароль.
Теперь же используя QPostgreSQL
я не могу указать любое имя и пароль, пишет
"ВАЖНО:  пользователь \"rudi\" не прошёл проверку подлинности (по паролю)\nQPSQL: Unable to connect
Пароль проходит только при условии, что я укажу пароль который указал при установки PostgreSQL
Но позвольте господа, если я сделаю программу и запущу на ином компе где не установлен PostgreSQL, что будет с паролем?



Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: Пантер от Декабрь 11, 2016, 15:51
1. Логин/пароль должен вводить юзер.
2. Настрой доступ с локального компа всем без пароля.
3. Постгрес это не скулайт, деплоить его немного сложнее.


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: PimenS от Декабрь 11, 2016, 16:15
Пароль проходит только при условии, что я укажу пароль который указал при установки PostgreSQL

Для этого у PostgreSQL существуют роли. Создайте пользователей, сколько вам угодно.

Но позвольте господа, если я сделаю программу и запущу на ином компе где не установлен PostgreSQL, что будет с паролем?

Но где-то же у вас установлен PostgreSQL к которому будет коннектиться ваша программа.

Вам для чего нужна база масштаба PostgreSQL?


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: rudireg от Декабрь 11, 2016, 16:28
Пароль проходит только при условии, что я укажу пароль который указал при установки PostgreSQL

Для этого у PostgreSQL существуют роли. Создайте пользователей, сколько вам угодно.

Но позвольте господа, если я сделаю программу и запущу на ином компе где не установлен PostgreSQL, что будет с паролем?

Но где-то же у вас установлен PostgreSQL к которому будет коннектиться ваша программа.

Вам для чего нужна база масштаба PostgreSQL?

Пишу софт, который использует Базу данных для хранения различной технической информации, а именно что то вроде программы для раскрутки в социальной сети инстаграм.
Софт должен хранить в БД список моих аккаунтов, список ID  аккаунтов с которыми была работа и так далее, то есть таблиц много и каждая содержит свои данные.
База должна быть локальной, а не где то на удаленном сервере.
Софт будут запускать люди, у которых естественно не установлена база данных postgreSQL
В начале я смотрел в сторону SQLITE, она хорошо подходит, но я бы хотел работать с БД многопоточно... и мне посоветовали для этих целей PostgreSQL


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: Пантер от Декабрь 11, 2016, 16:37
Ну, смотри. Можешь юзать скулайт, но делай это однопоточно (хотя, проверь, тут говорили, что многопоточка тоже работает). А можно юзать постгрес, но тогда включай его в инсталлятор и правильно устанавливай/настраивай на локальной машине.


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: rudireg от Декабрь 11, 2016, 16:44
Ну, смотри. Можешь юзать скулайт, но делай это однопоточно (хотя, проверь, тут говорили, что многопоточка тоже работает). А можно юзать постгрес, но тогда включай его в инсталлятор и правильно устанавливай/настраивай на локальной машине.
Иными словами ПОСТГРЕС обязательно должен быть установлен локально на компьютере того человека что использует софт.
И для этого следует засунуть его в инсталятор.
Жесть... я думал нет нужды... думал можно как с SQLite без установки


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: Пантер от Декабрь 11, 2016, 16:49
Нет, его без установки нельзя. Если тебе нужно простота деплоя, то скулайт или вообще ini файл или самописная БД.


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: PimenS от Декабрь 11, 2016, 17:49
Иными словами ПОСТГРЕС обязательно должен быть установлен локально на компьютере того человека что использует софт.
И для этого следует засунуть его в инсталятор.
Жесть... я думал нет нужды... думал можно как с SQLite без установки

Не нужно на каждой машине использующей программу устанавливать PostgreSQL. Установи его на одном компьютере в локальной сети.
И все пользователи будут работать с этой базой.

ЗЫ. Тогда и с многопоточностью проблем не возникает, если есть сложные расчеты, запросы.

Цитировать
База должна быть локальной, а не где то на удаленном сервере.

Если следовать этому условию, то конечно, чтобы на компьютере была база, придется ее туда установить.


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: sergek от Декабрь 11, 2016, 20:15
База должна быть локальной, а не где то на удаленном сервере.
Софт будут запускать люди, у которых естественно не установлена база данных postgreSQL
В начале я смотрел в сторону SQLITE, она хорошо подходит, но я бы хотел работать с БД многопоточно... и мне посоветовали для этих целей PostgreSQL
Довольно странные требования - база локальная, но софт запускать будут разные пользователи. Поясните, как это можно организовать.


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: rudireg от Декабрь 12, 2016, 15:37
База должна быть локальной, а не где то на удаленном сервере.
Софт будут запускать люди, у которых естественно не установлена база данных postgreSQL
В начале я смотрел в сторону SQLITE, она хорошо подходит, но я бы хотел работать с БД многопоточно... и мне посоветовали для этих целей PostgreSQL
Довольно странные требования - база локальная, но софт запускать будут разные пользователи. Поясните, как это можно организовать.


Что тут странного? Допустим вы спамер, вы решили купить программу которая спамит например по сайту вконтакте.
Сегодня вы сделали спам по 1000 человекам, а завтра снова будете спамить... и вы же не хотите спамить одних и тех же людей 2 раза?
Значит нужно где то хранить базу тех кого мы проспамили... а где хранить? Конечно же в базе локально на вашем компе... где же еще?


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: sergek от Декабрь 12, 2016, 17:16
Значит нужно где то хранить базу тех кого мы проспамили... а где хранить? Конечно же в базе локально на вашем компе... где же еще?
А нафига тут несколько потоков с доступом к БД? Что б было?


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: rudireg от Декабрь 12, 2016, 17:19
Значит нужно где то хранить базу тех кого мы проспамили... а где хранить? Конечно же в базе локально на вашем компе... где же еще?
А нафига тут несколько потоков с доступом к БД? Что б было?
Ну а если идет спам не с 1 вашей анкеты, у вас допустим 100 анкет... и вы с них однорвеменно спамите... то есть программа многопоточная....
то работать с БД в 1 поток? типа каждый поток кидает сигнал потоку - который работает с БД? или же проще каждый рабочий поток подключить в БД отдельно
Я может чего то не улавливаю конечно... поправьте меня если можете


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: Пантер от Декабрь 12, 2016, 18:52
В один поток. У тебя постоянные обращения к БД? Обычно выбирают данные и дальше с ними работают.


Название: Re: Postgresql + Qt 5.5 (как с ней работать)
Отправлено: rudireg от Декабрь 12, 2016, 18:59
В один поток. У тебя постоянные обращения к БД? Обычно выбирают данные и дальше с ними работают.
да постоянное обращение к данным... запись в лог... идет в БД, а так же каждая операция делает предварительную проверку в БД.
Например... стоит задача от имени 100 анкет сделать лайки... и нужно что бы не было повторных лайков... вдруг вчера или неделю назад мы уже лайкали какого то юзера... п потому  перед каждым лайком в БД проверяется делали ли ранее лайк текущему юзеру....
ну в принципе можно вынести работу с БД в отдельный поток и общаться посредством сигналов и слотов... тогда запросы будут в очереди... низнаю насколько это будет тормозить процесс, и будет ли вообще тормозить его.