Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2010, 12:44   #1
guest07
Новичок
Джуниор
 
Регистрация: 11.04.2010
Сообщений: 1
По умолчанию visual c++ ODBC

Поключаюсь к базе PostgresSQL.

Код:
HENV                    hEnv = NULL;
        HDBC                    hdbcDB = NULL;
        SQLRETURN                               Result;
        SQLCHAR                                 OutConnectionString[1024] ; 
        SQLSMALLINT                             StringLength2Ptr = 0;
        int StrInLen = 0;
        int StrOutLen = 0;
 
        SQLCHAR InConnectionString[89] = "Driver={PostgreSQL};Server=127.0.0.1;Port=5432;Database=postgres;Uid=postgres;Pwd=12345;";
        wclog << L" Connect to DataBase" << endl;
        // Allocate environment handle
        Result = SQLAllocHandle (SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
        if (Result == SQL_SUCCESS || Result == SQL_SUCCESS_WITH_INFO){
                wclog << L"SQLAllocHandle = SQL_SUCCESS" << endl;
                Result = SQLSetEnvAttr (hEnv, SQL_ATTR_ODBC_VERSION, (void*) SQL_OV_ODBC3, 0);
 
                if (Result == SQL_SUCCESS || Result == SQL_SUCCESS_WITH_INFO){
                        wclog << L"SQLSetEnvAttr = SQL_SUCCESS" << endl;
                        // Allocate connection handle
                        Result = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hdbcDB);
 
                        if (Result == SQL_SUCCESS || Result == SQL_SUCCESS_WITH_INFO){
                                wclog << L"SQLAllocHandle = SQL_SUCCESS" << endl;
                                // Set login timeout to 5 seconds.
                                //Result = SQLSetConnectAttr (hdbcDB, SQL_LOGIN_TIMEOUT, (void*)5, 0);
 
                                        StrInLen = sizeof(InConnectionString);
                                        StrOutLen = sizeof(OutConnectionString);
                                        Result = SQLDriverConnect(hdbcDB, NULL, InConnectionString, StrInLen, OutConnectionString, StrOutLen,   &StringLength2Ptr, SQL_DRIVER_PROMPT);
                                        
                                        if (Result == SQL_SUCCESS || Result == SQL_SUCCESS_WITH_INFO){
                                                wclog << L"SQLDriverConnect = SQL_SUCCESS" << endl;
                                                int x;
                                                cout << "...";
                                                cin >> x;
                                        }
                                        else {
                                                SQLHSTMT                hstmt;
                                                RETCODE                 rcError;
                                                SQLCHAR                 buffer[SQL_MAX_MESSAGE_LENGTH + 1];
                                                SQLCHAR                 sqlstate[SQL_SQLSTATE_SIZE + 1];
                                                SQLINTEGER              sqlcode;
                                                SQLSMALLINT             length;
 
                                                rcError=SQLError(hEnv, hdbcDB, SQL_NULL_HSTMT, sqlstate, &sqlcode, buffer, SQL_MAX_MESSAGE_LENGTH + 1, &length);
                                            printf("\n **** ERROR *****\n");
                                                printf("         SQLSTATE: %s\n", sqlstate);
                                                printf("Native Error Code: %ld\n", sqlcode);
                                                int x;
                                                cout << "...";
                                                cin >> x;
                                        }
                        }
                }
        }
                SQLFreeHandle(SQL_HANDLE_DBC, hdbcDB);
                SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
На этой строке
Result = SQLDriverConnect(hdbcDB, NULL, InConnectionString, StrInLen, OutConnectionString, StrOutLen, &StringLength2Ptr, SQL_DRIVER_PROMPT);
возвращает ошибку Result =-1;
Далее определяю ее SQLState = HY024; Расшифровывается как invalid attribute value. Драйвер psqlODBC подключил, там же проверил конект к базе - все подсоединяется. Попробовал подсоеденить с помощью студии, тоже все присоединяется. Студия выдает какую то непонятную строку подключения на 600 символов. Пробовал ее, таже ошибка. Эту строку подключения посмотрел на connectionstring.com. Помогите пожалуйста решить эту проблему.

Последний раз редактировалось Sazary; 12.04.2010 в 17:48.
guest07 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ODBC в Linux knight Lazarus, Free Pascal, CodeTyphon 7 29.10.2010 16:47
excel-odbc kuzminki Microsoft Office Excel 0 26.08.2009 12:48
ODBC и MFC MadDog__ Win Api 0 06.02.2009 01:18
Odbc Apo Компоненты Delphi 7 11.03.2008 11:54
проблема с ODBC ГОСЕАН БД в Delphi 8 23.09.2007 10:53