Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хотел ознакомиться с интерфейсом ODBC 
:(
    Опции темы
Гость_Сергей
Дата 13.10.2004, 01:32 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


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

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0574 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.