Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| |
Исходный текст CGI-модуля: 02.10.04 01:04 Число просмотров: 3018
Автор: Серый Статус: Незарегистрированный пользователь
|
Исходный текст CGI-модуля:
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_DB";
UCHAR user_Name[MAXNAME] = "";
UCHAR user_Password[MAXNAME] = "";
// инициализация среды выполнения приложения
err = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &sql_henv);
// анализ кода ошибки
if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO) return 1;
// установка параметров среды выполнения приложения
err = SQLSetEnvAttr(sql_henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
// анализ кода ошибки
if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO) return 1;
// инициализация среды соединения
err = SQLAllocHandle(SQL_HANDLE_DBC, sql_henv, &sql_hdbc);
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));
if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO)
{
printf("SQLConnect error\n");
return 1;
}
// получение идентификатора команд
err = SQLAllocHandle(SQL_HANDLE_STMT, sql_hdbc, &sql_hstmt);
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);
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>");
// удаление служебных переменных
SQLFreeHandle(SQL_HANDLE_STMT, sql_hstmt);
SQLDisconnect(sql_hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, sql_hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, sql_henv);
return 0;
}
---
Источник данных: это стандартная (для примеров) БД на Access, расположенная по адресу D:\Inetpub\iissamples\sdk\asp\database\Authors.mdb. В администрировании компьютера указываю пользовательский DSN как "Authors_DB", определяю путь к БД и устанавливаю драйвер Microsoft Access driver (*.mdb). Не катит :(
|
<web building>
|
Ошибка CGI 30.09.04 01:49
Автор: Серый Статус: Незарегистрированный пользователь
|
Скажу честно. Изучаю доступ к БД при помощи ODBC и списал программу с книги. Но постарался в ней разобраться и осмыслить каждую строчку. Вроде бы все нормально, но при активизации CGI-модуля с Web-страницы по ссылке сервак выдает такую информацию:
Ошибка CGI
Указанное приложение CGI не возвратило полный набор заголовков HTTP. Не возвращены заголовки:
SQLConnect error
Сервер настроил правильно (проверял на другом CGI приложении). Пользовательское DSN прописал. Программу CGI куда надо разместил. В чем может быть проблема?
PS1: Только не пишите пожалуйста, что чужие программы списывать нехорошо. Сам знаю;)
PS2: В книге у автора все прокатило (может, потому что в книге?).
|
|
модуль на обозрение и источник данных ODBC 01.10.04 07:13
Автор: Korsh <Мельников Михаил> Статус: Elderman
|
|
| |
Исходный текст CGI-модуля: 02.10.04 01:04
Автор: Серый Статус: Незарегистрированный пользователь
|
Исходный текст CGI-модуля:
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_DB";
UCHAR user_Name[MAXNAME] = "";
UCHAR user_Password[MAXNAME] = "";
// инициализация среды выполнения приложения
err = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &sql_henv);
// анализ кода ошибки
if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO) return 1;
// установка параметров среды выполнения приложения
err = SQLSetEnvAttr(sql_henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
// анализ кода ошибки
if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO) return 1;
// инициализация среды соединения
err = SQLAllocHandle(SQL_HANDLE_DBC, sql_henv, &sql_hdbc);
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));
if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO)
{
printf("SQLConnect error\n");
return 1;
}
// получение идентификатора команд
err = SQLAllocHandle(SQL_HANDLE_STMT, sql_hdbc, &sql_hstmt);
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);
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>");
// удаление служебных переменных
SQLFreeHandle(SQL_HANDLE_STMT, sql_hstmt);
SQLDisconnect(sql_hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, sql_hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, sql_henv);
return 0;
}
---
Источник данных: это стандартная (для примеров) БД на Access, расположенная по адресу D:\Inetpub\iissamples\sdk\asp\database\Authors.mdb. В администрировании компьютера указываю пользовательский DSN как "Authors_DB", определяю путь к БД и устанавливаю драйвер Microsoft Access driver (*.mdb). Не катит :(
|
|
|