![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
Гость_Сергей |
|
|||
Unregistered |
У меня такая проблема. Хотел ознакомиться с интерфейсом ODBC и использовал одну из программ, приведенных в качестве примера в книге. Выполнение программы проходит успешно, связь с источником данных устанавливается. Но затем, когда я разместил полученный CGI-модуль в Inetpub/Scripts и создал HTML-страницу с ссылкой на этот модуль, то браузер выдал сообщение, что связь установить невозможно (SQLConnect вернула -1). Скажите пожалуйста, в чем дело?
Исходный cpp-модуль: int main(int argc, char* argv[]) { // определение системных переменных SQLHENV sql_henv = SQL_NULL_HENV; SQLHDBC sql_hdbc = SQL_NULL_HDBC; SQLHSTMT sql_hstmt = SQL_NULL_HSTMT; RETCODE err; UCHAR sys_DSN[SQL_MAX_DSN_LENGTH + 1] = "Authors\0"; UCHAR user_Name[MAXNAME] = "\0"; UCHAR user_Password[MAXNAME] = "\0"; printf("<HTML><HEAD><TITLE>ODBC Connection Test</TITLE></HEAD><BODY>"); printf("SQL_SUCCESS: %d<BR>", SQL_SUCCESS); printf("SQL_SUCCESS_INFO: %d<BR>", SQL_SUCCESS_WITH_INFO); // инициализация среды выполнения приложения err = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &sql_henv); printf("SQLAllocHandle: %d<BR>", err); if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO) return 1; // установка параметров среды выполнения приложения err = SQLSetEnvAttr(sql_henv, SQL_ATTR_ODBC_VERSION, reinterpret_cast<SQLPOINTER>(SQL_OV_ODBC3), SQL_IS_INTEGER); printf("SQLSetEnv: %d<BR>", err); if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO) return 1; // инициализация среды соединения err = SQLAllocHandle(SQL_HANDLE_DBC, sql_henv, &sql_hdbc); printf("SQLAllocHandle: %d<BR>", err); if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO) return 1; // установка соединения //err = SQLConnect(sql_hdbc, sys_DSN, (SWORD)strlen((const char*)sys_DSN), user_Name, (SWORD)strlen((const char*)user_Name), user_Password, (SWORD)strlen((const char*)user_Password)); err = SQLConnect(sql_hdbc,reinterpret_cast<SQLCHAR*>(sys_DSN), SQL_NTS, reinterpret_cast<SQLCHAR*>(user_Name), SQL_NTS, reinterpret_cast<SQLCHAR*>(user_Password), SQL_NTS); printf("SQLConnect: %d<BR>", err); if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO) { printf("SQLConnect error\n"); return 1; } // получение идентификатора команд err = SQLAllocHandle(SQL_HANDLE_STMT, sql_hdbc, &sql_hstmt); printf("SQLAllocHandle_GetID: %d<BR>", err); if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO) { printf("SQLAllocHandle Error\n"); return 1; } // выполнение команды err = SQLExecDirect(sql_hstmt, (unsigned char*) "SELECT * FROM Authors", SQL_NTS); printf("SQLExecDirect: %d<BR>", err); if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO) { printf("SQLExecDirect Error\n"); return 1; } // связывание указателей со значениями полей текущей записи SQLCHAR id[30]; SQLCHAR name[30]; SQLCHAR year[30]; SQLINTEGER lid; SQLINTEGER lname; SQLINTEGER lyear; err = SQLBindCol(sql_hstmt, 1, SQL_C_CHAR, id, 30, &lid); err = SQLBindCol(sql_hstmt, 2, SQL_C_CHAR, name, 30, &lname); err = SQLBindCol(sql_hstmt, 3, SQL_C_CHAR, year, 30, &lyear); // вывод заголовка HTML-документа char *d = "%"; /* printf("Content-type: text/html%c%c", 10, 10); printf("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\""); printf("<HTML><HEAD><TITLE>ODBC Connection Test</TITLE></HEAD><BODY>"); // вывод заголовка таблицы printf("<TABLE Width='100%s' CellSpacing=10 CellPadding=10 Border=3>", d); printf("<CAPTION Align='center'> Information from DataBase</CAPTION>"); printf("<TR><TH Width='100%s'>Id</TH><TH>Имя</TH>Год</TH></TR>", d); // вывод строчек таблицы while ((err = SQLFetch(sql_hstmt)) != SQL_NO_DATA) { printf("<TR><TD>%15s</TD><TD>%25s</TD><TD>%10s</TD></TR>", id, name, year); } printf("</TABLE>"); printf("</BODY></HTML>"); */ printf("</BODY></HTML>"); // удаление служебных переменных SQLFreeHandle(SQL_HANDLE_STMT, sql_hstmt); SQLDisconnect(sql_hdbc); SQLFreeHandle(SQL_HANDLE_DBC, sql_hdbc); SQLFreeHandle(SQL_HANDLE_ENV, sql_henv); return 0; } Сервер: MIIS 5.1 OC: WinXP Pro Среда программирования: Visual Studio 6.0 Источник данных: БД в формате СУРБД Access-2000. Браузер: IE 6.0 В администраторе источников данных ODBC прописал User_DSN (иначе бы программа выполнилась бы также с ошибкой доступа). PS: у автора книги CGI-модуль как во время выполнения в среде VS 6.0, так и во время активации с HTML-страницы функционировал нормально. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Общие вопросы по базам данных" | |
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |