Как использовать ECPG в MSVC - PullRequest
2 голосов
/ 15 июля 2011

Я нахожусь на ранней стадии разработки программного обеспечения и пытаюсь понять, как использовать ecpg. Мне удалось собрать PostgreSQL 9.0.4 , используя MSVC 2010 , и я успешно создал тестовую программу, чтобы убедиться, что она работает. (http://www.linuxjournal.com/content/accessing-postgresql-cc,, за исключением модифицированных для Windows.)

Однако я не знаю, как собрать, что "#include" в источнике и т. Д. Для ecpg. Я нашел множество примеров синтаксиса, но ничего не делал в качестве тестовой программы или пошагового руководства. Даже что-то из предыдущей версии (8.4.x) будет полезно.

1 Ответ

2 голосов
/ 16 июля 2011

AFAIK сначала вам нужен встроенный файл SQL C (с расширением pgc). Простой пример:

int main(void)
{
    EXEC SQL BEGIN DECLARE SECTION;
    int ordinaryInt;
    EXEC SQL END DECLARE SECTION;

    EXEC SQL CONNECT TO tcp:postgresql://localhost:5432/postgres AS myconnection USER postgres USING '12345';

    EXEC SQL INSERT INTO t (value) VALUES ('abcdefgj');
    EXEC SQL COMMIT;

    EXEC SQL DISCONNECT myconnection;

    return 0;
}

Строка подключения хорошо объяснена в doc . После этого вам нужно ecpg.exe, чтобы преобразовать вышеуказанный код в известный код C:

Перед компиляцией вы запускаете файл через встроенный SQL C препроцессор, который преобразует используемые вами операторы SQL в специальные вызовы функций. После компиляции необходимо связать со специальной библиотекой который содержит необходимые функции.

Например:

"C:\Program Files (x86)\PostgreSQL\9.0\bin\ecpg.exe" -o ecpgTest.c ecpgTest.pgc

Ваш сгенерированный код C выглядит так:

/* Processed by ecpg (4.2.1) */
/* These include files are added by the preprocessor */
#include <ecpglib.h>
#include <ecpgerrno.h>
#include <sqlca.h>
/* End of automatic include section */

#line 1 "ecpgTest.pgc"
int main(void)
{
    /* exec sql begin declare section */


#line 4 "ecpgTest.pgc"
 int ordinaryInt ;
/* exec sql end declare section */
#line 5 "ecpgTest.pgc"


    { ECPGconnect(__LINE__, 0, "tcp:postgresql://localhost:5432/postgres" , "postgres" , "'12345'" , "myconnection", 0); }
#line 7 "ecpgTest.pgc"


    { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into t ( value ) values ( 'abcdefgj' )", ECPGt_EOIT, ECPGt_EORT);}
#line 9 "ecpgTest.pgc"

    { ECPGtrans(__LINE__, NULL, "commit");}
#line 10 "ecpgTest.pgc"


    { ECPGdisconnect(__LINE__, "myconnection");}
#line 12 "ecpgTest.pgc"


    return 0;
}

Добавьте путь C:\Program Files (x86)\PostgreSQL\9.0\include в Дополнительные каталоги включения (Свойства конфигурации → C / C ++) и поместите libecpg.lib в Дополнительные зависимости (Линкер → Ввод). Вероятно, вам нужно добавить путь C:\Program Files (x86)\PostgreSQL\9.0\lib в Дополнительные директории библиотеки (Линкер → Общие ) и вы готовы к работе (обратите внимание, что некоторые библиотеки DLL расположены в C:\Program Files (x86)\PostgreSQL\9.0\bin).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...