Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Подключение с++ и postgres с помощью библиотеки libpq / 25 сообщений из 27, страница 1 из 2
03.03.2017, 23:32
    #39413982
ver__rev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
Здравствуйте, дали задание написать программу на с++ .которая позволяла бы выводить результаты запросов из postgres, для начала нужно соединить их для этого использовала библиотеку: libpq-fe.h. Поскольку с++ выдавал ошибки ,явно прописала пути include lib в свойствах проекта и данные ошибки пропали, то есть библиотека подключена? Но возникли непонятные мне новые ошибки :



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Ошибка	12	error LNK1120: неразрешенных внешних элементов: 11	C:\Users\Toshiba\Documents\Visual Studio 2013\Projects\ConsoleApplication59\Debug\ConsoleApplication59.exe	ConsoleApplication59
Ошибка	11	error LNK2019: ссылка на неразрешенный внешний символ _PQclear в функции _main	C:\Users\Toshiba\Documents\Visual Studio 2013\Projects\ConsoleApplication59\ConsoleApplication59\ConsoleApplication59.obj	ConsoleApplication59
Ошибка	1	error LNK2019: ссылка на неразрешенный внешний символ _PQconnectdb в функции _main	C:\Users\Toshiba\Documents\Visual Studio 2013\Projects\ConsoleApplication59\ConsoleApplication59\ConsoleApplication59.obj	ConsoleApplication59
Ошибка	4	error LNK2019: ссылка на неразрешенный внешний символ _PQerrorMessage в функции _main	C:\Users\Toshiba\Documents\Visual Studio 2013\Projects\ConsoleApplication59\ConsoleApplication59\ConsoleApplication59.obj	ConsoleApplication59
Ошибка	5	error LNK2019: ссылка на неразрешенный внешний символ _PQexec в функции _main	C:\Users\Toshiba\Documents\Visual Studio 2013\Projects\ConsoleApplication59\ConsoleApplication59\ConsoleApplication59.obj	ConsoleApplication59
Ошибка	2	error LNK2019: ссылка на неразрешенный внешний символ _PQfinish в функции "void __cdecl exit_nicely(struct pg_conn *)" (?exit_nicely@@YAXPAUpg_conn@@@Z)	C:\Users\Toshiba\Documents\Visual Studio 2013\Projects\ConsoleApplication59\ConsoleApplication59\ConsoleApplication59.obj	ConsoleApplication59
Ошибка	9	error LNK2019: ссылка на неразрешенный внешний символ _PQfname в функции _main	C:\Users\Toshiba\Documents\Visual Studio 2013\Projects\ConsoleApplication59\ConsoleApplication59\ConsoleApplication59.obj	ConsoleApplication59
Ошибка	10	error LNK2019: ссылка на неразрешенный внешний символ _PQgetvalue в функции _main	C:\Users\Toshiba\Documents\Visual Studio 2013\Projects\ConsoleApplication59\ConsoleApplication59\ConsoleApplication59.obj	ConsoleApplication59
Ошибка	8	error LNK2019: ссылка на неразрешенный внешний символ _PQnfields в функции _main	C:\Users\Toshiba\Documents\Visual Studio 2013\Projects\ConsoleApplication59\ConsoleApplication59\ConsoleApplication59.obj	ConsoleApplication59
Ошибка	7	error LNK2019: ссылка на неразрешенный внешний символ _PQntuples в функции _main	C:\Users\Toshiba\Documents\Visual Studio 2013\Projects\ConsoleApplication59\ConsoleApplication59\ConsoleApplication59.obj	ConsoleApplication59
Ошибка	6	error LNK2019: ссылка на неразрешенный внешний символ _PQresultStatus в функции _main	C:\Users\Toshiba\Documents\Visual Studio 2013\Projects\ConsoleApplication59\ConsoleApplication59\ConsoleApplication59.obj	ConsoleApplication59
Ошибка	3	error LNK2019: ссылка на неразрешенный внешний символ _PQstatus в функции _main	C:\Users\Toshiba\Documents\Visual Studio 2013\Projects\ConsoleApplication59\ConsoleApplication59\ConsoleApplication59.obj	ConsoleApplication59


Искала ответ на вопрос ,что с этим делать на форумах,но в разных случаях данные ошибки возникают из-за разных вещей. Не могли бы Вы помочь разобраться в чём дело и как это исправить?

Пока что не писала никакую программу, а взяла стандартный пример из документации :

Пример 31-1. Первая программа, демонстрирующая использование libpq

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
/*
 * testlibpq.c
 *
 *      Тестирование libpq (версии для C), клиентской библиотеки PostgreSQL.
 */
#include <stdio.h>
#include <stdlib.h>
#include <libpq-fe.h>

static void
exit_nicely(PGconn *conn)
{
    PQfinish(conn);
    exit(1);
}

int
main(int argc, char **argv)
{
    const char *conninfo;
    PGconn     *conn;
    PGresult   *res;
    int         nFields;
    int         i,
                j;

    /*
     * Если пользователь передаёт параметр в командной строке, использовать его как
     * строку соединения; иначе принять по умолчанию dbname=postgres и использовать
     * переменные среды или значения по умолчанию для всех других параметров соединения.
     */
    if (argc > 1)
        conninfo = argv[1];
    else
        conninfo = "dbname = postgres";

    /* Установить подключение к базе данных */
    conn = PQconnectdb(conninfo);

    /* Убедиться, что соединение с сервером установлено успешно */
    if (PQstatus(conn) != CONNECTION_OK)
    {
        fprintf(stderr, "Connection to database failed: %s",
                PQerrorMessage(conn));
        exit_nicely(conn);
    }

    /*
     * В нашем тестовом сценарии задействуется курсор, а работать с ним нужно
     * в блоке транзакции. Мы могли бы сделать всё то же самое, обойдясь одним
     * PQexec() с запросом "select * from pg_database", но это было бы
     * слишком просто для хорошего примера.
     */

    /* Начать блок транзакции */
    res = PQexec(conn, "BEGIN");
    if (PQresultStatus(res) != PGRES_COMMAND_OK)
    {
        fprintf(stderr, "BEGIN command failed: %s", PQerrorMessage(conn));
        PQclear(res);
        exit_nicely(conn);
    }

    /*
     * Когда PGresult становится не нужен, его нужно очистить (используя PQclear)
     * во избежание утечек памяти
     */
    PQclear(res);

    /*
     * Выбрать строки из pg_database, системного каталога баз данных
     */
    res = PQexec(conn, "DECLARE myportal CURSOR FOR select * from pg_database");
    if (PQresultStatus(res) != PGRES_COMMAND_OK)
    {
        fprintf(stderr, "DECLARE CURSOR failed: %s", PQerrorMessage(conn));
        PQclear(res);
        exit_nicely(conn);
    }
    PQclear(res);

    res = PQexec(conn, "FETCH ALL in myportal");
    if (PQresultStatus(res) != PGRES_TUPLES_OK)
    {
        fprintf(stderr, "FETCH ALL failed: %s", PQerrorMessage(conn));
        PQclear(res);
        exit_nicely(conn);
    }

    /* сначала напечатать имена атрибутов */
    nFields = PQnfields(res);
    for (i = 0; i < nFields; i++)
        printf("%-15s", PQfname(res, i));
    printf("\n\n");

    /* затем напечатать строки */
    for (i = 0; i < PQntuples(res); i++)
    {
        for (j = 0; j < nFields; j++)
            printf("%-15s", PQgetvalue(res, i, j));
        printf("\n");
    }

    PQclear(res);

    /* закрыть портал ... ошибки нас больше не интересуют ... */
    res = PQexec(conn, "CLOSE myportal");
    PQclear(res);

    /* завершить транзакцию */
    res = PQexec(conn, "END");
    PQclear(res);

    /* закрыть подключение к базе данных и провести очистку */
    PQfinish(conn);

    return 0;
}
...
Рейтинг: 0 / 0
04.03.2017, 00:55
    #39413994
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
Вот эти ошибки и означают что библиотека не подключена.
Не знаю какие там ошибки у тебя пропадали, но скорее всего, то были ошибки из-за отсутствия .h. Теперь еще подключи .lib и станет хорошо.
...
Рейтинг: 0 / 0
04.03.2017, 08:30
    #39414022
ver__rev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
White Owl,

Дополнительные каталоги включаемых: прописала путь "C:\Proram Files\PostgreSQL\9.5\include"
Дополнительные каталоги библиотек: прописала путь "C:\Proram Files\PostgreSQL\9.5\lib"
Дополнительные зависимости:libpq.ib

из-за этого пропало подчёркивание строки с бибиотекой #include <libpq-fe.h> ,но появились данные ошибки. Прописать lib ещё где-то надо? Спасибо.
...
Рейтинг: 0 / 0
04.03.2017, 12:41
    #39414067
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
ver__revДополнительные зависимости: libpq.ib
Уверены, что такой файл существует и имеет формат, совместимый с вашей версией линкера?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.03.2017, 14:11
    #39414078
ver__rev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
Насчёт того , что такой файл есть , уверена , а версию как проверить можете объяснить ? Спасибо .
...
Рейтинг: 0 / 0
04.03.2017, 14:20
    #39414080
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
ver__revНасчёт того , что такой файл есть , уверена
Именно с расширением "ib"?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.03.2017, 14:24
    #39414081
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
ver__revа версию как проверить можете объяснить ?
Точнее - не версию, а разрядность. Например, с помощью "dumpbin /headers".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.03.2017, 20:33
    #39414157
ver__rev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
Нет ,естественно не с таким расширением это у меня клавиатура замечательная,но исправив это не помогло. Теперь ещё и эту строчку подчёркивает #include <libpq-fe.h> и дальше соответственно тоже.
...
Рейтинг: 0 / 0
04.03.2017, 23:17
    #39414194
ver__rev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
Dimitry Sibiryakov,
если я Вас правильно поняла ,то что-то такое получается и видимо разрядность 64. Но я путь путь до библиотеки в postgresql прописывала .
...
Рейтинг: 0 / 0
05.03.2017, 07:45
    #39414222
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
ver__rev,

ты просто базовые вещи не умеешь делать, а именно, использовать библиотеки.

Этому нужно отдельно научиться, попробуй что-то типа этого почитать:

https://msdn.microsoft.com/en-us/library/ms235627.aspx

Возможно, это не лучший тьюториал на эту тему, так как там классы рассматриваются, а у тебя C-шная библиотека, но сейчас я не могу найти ничего лучше.
...
Рейтинг: 0 / 0
05.03.2017, 17:48
    #39414343
ver__rev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
http://www.cyberforum.ru/postgresql/thread1850924.html я делала вот как тут написано этих действий недостаточно ? Ещё нашла pragma comment , но это тоже не помогает . Не отрицаю, что не умею подключать библиотеки , но по ссылке там как-то сложно расписано . У многих проблема в том , что Postgres 64 , а студия 32 и приходится переустанавливать.
...
Рейтинг: 0 / 0
06.03.2017, 02:11
    #39414442
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
ver__revУ многих проблема в том , что Postgres 64 , а студия 32 и приходится переустанавливать.

Postgres может быть хоть 16, хоть 128 бит... Он в другом процессе и общение с ним идёт по сети.

Тебе нужно клиентские библиотеки для общения с PG иметь в том же виде, в котором твоё приложение собирается.
Если у тебя 32 бита, поставь и библиотеку для PG в виде 32 бит, это не трудно.
...
Рейтинг: 0 / 0
06.03.2017, 02:16
    #39414444
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
ver__rev http://www.cyberforum.ru/postgresql/thread1850924.html я делала вот как тут написано ...


авторДальше:
1 -> свойства проекта -> с++ -> общие -> Дополнительные каталоги включаемых файлов = H:\Android\C++\VisualStudio\Postgress
2 -> свойства проекта -> с++ -> общие -> Дополнительные каталоги включаемых файлов = H:\Android\C++\VisualStudio\Postgress\lib



Ну, так себе инструкция, парень в список каталогов с заголовками (include) прописывает каталог с библиотеками...


Чё он там ещё-то напридумывал ...

Код: plaintext
1.
2.
#pragma comment(lib, "libpq.dll")
#pragma comment(lib, "libpq.lib")



Он просто не врубается , что делает...

Не используй #pragma comment, кстати. Прописывай библиотеки руками в проекте.
...
Рейтинг: 0 / 0
07.03.2017, 11:57
    #39415353
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
MasterZivver__rev http://www.cyberforum.ru/postgresql/thread1850924.html я делала вот как тут написано ...


авторДальше:
1 -> свойства проекта -> с++ -> общие -> Дополнительные каталоги включаемых файлов = H:\Android\C++\VisualStudio\Postgress
2 -> свойства проекта -> с++ -> общие -> Дополнительные каталоги включаемых файлов = H:\Android\C++\VisualStudio\Postgress\lib



Ну, так себе инструкция, парень в список каталогов с заголовками (include) прописывает каталог с библиотеками...


Чё он там ещё-то напридумывал ...

Код: plaintext
1.
2.
#pragma comment(lib, "libpq.dll")
#pragma comment(lib, "libpq.lib")





Он просто не врубается , что делает...

Не используй #pragma comment, кстати. Прописывай библиотеки руками в проекте.


хмм.. девочька
...
Рейтинг: 0 / 0
07.03.2017, 12:00
    #39415356
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
ver__revЗдравствуйте, дали задание написать программу на с++ .которая позволяла бы выводить результаты запросов из postgres,

[/src]



а зачем вы занимаетесь этим экстримом, тем более будучи далёкой от этих вещей?

используйте odbc драйвер и не парьтесь
...
Рейтинг: 0 / 0
07.03.2017, 22:02
    #39415713
ver__rev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
Ролг Хупин,

спасибо ,но я дала неточную формулировку моего задания.вот оно:Надо реализовать консольную программу, в которой будет меню позволяющее:
- вывести содержимое всей таблицы
- вывести какую-то одну строку по значению её id
- завершить программу
Для реализации используйте стандартный с++.
Так что мне нужно разобраться именно с этой библиотекой.
...
Рейтинг: 0 / 0
07.03.2017, 22:06
    #39415717
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
ver__rev,

не переживай. совет использовать ODBC был от человека который ее в глаза не видел
...
Рейтинг: 0 / 0
08.03.2017, 17:11
    #39415889
ver__rev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
Делаю как в документации postgres:
https://postgrespro.ru/docs/postgresql/9.4/libpq-build.html

Включите заголовочный файл libpq-fe.h:

#include <libpq-fe.h>
-это сделала и в пустой проект подключила заголовочный файл с путём: c:\Program Files\PostgreSQL\9.5\include\libpq-fe.h

Дальше в документации написано :Сообщите вашему компилятору каталог, в котором установлены заголовочные файлы PostgreSQL, передав ему параметр -Iкаталог.

Если существует возможность, что вашу программу будут компилировать другие пользователи, то путь к каталогу не следует жёстко задавать таким образом. Вместо этого вы можете воспользоваться утилитой pg_config и узнать, где в локальной системе находятся заголовочные файлы, следующим образом:

$ pg_config --includedir
/usr/local/include
И вопрос: как передавать компилятору каталог?
...
Рейтинг: 0 / 0
09.03.2017, 12:20
    #39416079
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
Ролг ХупинMasterZiv Он просто не врубается , что делает...

Не используй #pragma comment, кстати. Прописывай библиотеки руками в проекте.


хмм.. девочька


Топикстартер тут - девочка.
По ссылке топикстартер -- мальчик, или хотя бы хочет таким казаться, пишет о себе в мужском роде.
...
Рейтинг: 0 / 0
09.03.2017, 12:24
    #39416080
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
ver__revРолг Хупин,

спасибо ,но я дала неточную формулировку моего задания.вот оно:Надо реализовать консольную программу, в которой будет меню позволяющее:
- вывести содержимое всей таблицы
- вывести какую-то одну строку по значению её id
- завершить программу
Для реализации используйте стандартный с++.
Так что мне нужно разобраться именно с этой библиотекой.

Вам ведь не сказали использовать именно эту библиотеку, смысл усложнять?
Использование одбц в с++ разве делает приложение не стандартным с++?
Всё это можно легко сделать используя одбц.
...
Рейтинг: 0 / 0
09.03.2017, 12:37
    #39416093
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
Ролг ХупинВсё это можно легко сделать используя одбц.
ODBC библиотека подключается сама собой?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.03.2017, 12:55
    #39416112
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
Dimitry SibiryakovРолг ХупинВсё это можно легко сделать используя одбц.
ODBC библиотека подключается сама собой?..
таки да, в Vusual Studio - по умолчанию подключается
...
Рейтинг: 0 / 0
09.03.2017, 12:56
    #39416115
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
Dimitry SibiryakovРолг ХупинВсё это можно легко сделать используя одбц.
ODBC библиотека подключается сама собой?..


девелопером, собственно и постгреосовская либ сама собой не подключается.
...
Рейтинг: 0 / 0
09.03.2017, 15:55
    #39416277
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
Siemarglver__rev,

не переживай. совет использовать ODBC был от человека который ее в глаза не видел


самое смешное, что именно одбц для постгреса я и видел, и даже делал в ней некоторые исправления.

По теме: как завещал большой специалист Крис Касперски - задачу нужно решать здесь и сейчас, в частности, а не пытаться делать сложное универсальное решение.

Судя по описанию задачи ТС нужно ее сделать быстро и красиво, было предложено использовать одбц.
...
Рейтинг: 0 / 0
09.03.2017, 19:55
    #39416467
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение с++ и postgres с помощью библиотеки libpq
Ролг Хупин,

Т.е ты утверждаешь, что этот интерфейс проще?

https://code.msdn.microsoft.com/ODBC-sample-191624ae/sourcecode?fileId=51137&pathId=1980325953
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Подключение с++ и postgres с помощью библиотеки libpq / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]