Михаиллл
9 декабря 2018 г. 19:25

Как в QT подключить PostgreSQL

Qt, PostgreSQL

Здравствуйте.
Пытаюсь подключить PostgreSQL 9,6. Разрядность скорей всего 32.
Компилятор MinGW32.
В pro файле дописал
INCLUDEPATH += C:/Program Files (x86)/PostgreSQL/9.6/include
LIBS+= C:/Program Files (x86)/PostgreSQL/9.6/lib/libpq.dll
В проекте срр написал
QSqlDatabase SearchDB = QSqlDatabase::addDatabase("QPSQL");
При работе выдает ошибку:
QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
Скажите пожалуйста как правильно подключить PostgreSQL 9,6?

2

Вам это нравится? Поделитесь в социальных сетях!

8
Evgenii Legotckoi
  • 9 декабря 2018 г. 21:14

Непонятно, вы драйвер скачали или собирали?

Сдаётся мне, что возможно более правильный вариант собрать своим компилятором вначале его, а потом уже подключать.

    Михаиллл
    • 10 декабря 2018 г. 17:59

    оказывается новый драйвер не нужен, так работает:
    https://forum.qt.io/topic/81148/cannot-install-postgresql-driver/8

      Михаиллл
      • 10 декабря 2018 г. 18:29

      С драйвером проблема решена.
      Но дальше пытаюсь подключиться к базе.
      На этом этапе

      1. QSqlDatabase SearchDB = QSqlDatabase::addDatabase("QPSQL");
      2. SearchDB.setDatabaseName("CVReader");
      3. SearchDB.setUserName("postgres");
      4. SearchDB.setHostName("localhost");
      5. SearchDB.setPassword("1qaz");
      6. if (!SearchDB.open()) {qDebug()<<"bd is open";} else {qDebug()<<"bd not open";}

      дебаг говорит что база открыта.
      Если дальше делать подключение к таблице

      1. QSqlTableModel *SearchTableModel = new QSqlTableModel(this);
      2. SearchTableModel ->setTable("ResumePostgresSQL");
      3. SearchTableModel->setHeaderData(1,Qt::Horizontal, "Название столбца");
      4. SearchTableModel->select();

      то выдает ошибку:
      QSqlDatabasePrivate::database: unable to open database: "could not connect to server: Connection refused (0x0000274D/10061)\n\tIs the server running on host \"localhost\" (::1) and accepting\n\tTCP/IP connections on port 5432?\ncould not connect to server: Connection refused (0x0000274D/10061)\n\tIs the server running on host \"localhost\" (127.0.0.1) and accepting\n\tTCP/IP connections on port 5432?\nQPSQL: Unable to connect"
      Скажите пожалуйста, как правильно подключить эту субд?

        Михаиллл
        • 10 декабря 2018 г. 18:50
        • (ред.)

        извините ошибся, на SearchDB.open() база не открывается.
        может быть setHostName нужен другой?

          Evgenii Legotckoi
          • 10 декабря 2018 г. 18:51

          Насколько помню, там нужно ещё порты укзаывать, если подключение идёт к сетевой базе данных и вместо localhost нужно указать ip адрес, в вашем случае "127.0.0.1"

            Evgenii Legotckoi
            • 10 декабря 2018 г. 18:56

            так вроде бы

            1. SearchDB.setHostName( "192.168.0.1" );
            2. SearchDB.setPort( 5432 );
              Михаиллл
              • 10 декабря 2018 г. 19:03

              Спасибо.
              Дописал так и база открылась

              1. SearchDB.setHostName("127.0.0.1");
              2. SearchDB.setPort(5434);

              Но QSqlTableModel не отображает запрашиваемую таблицу.

                Evgenii Legotckoi
                • 10 декабря 2018 г. 19:10

                Это уже другой, отдельный вопрос )))

                Скорее всего неправильно объявлено что-то в таблице, либо она не создана, либо неправильно читается. Смотрите вывод ошибок

                  Комментарии

                  Только авторизованные пользователи могут публиковать комментарии.
                  Пожалуйста, авторизуйтесь или зарегистрируйтесь