Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Через 3 дня :

День славянской письменности и культуры


CGI интерфейс для доступа к данным как исполняемая программа


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
Пол:Жен Kate
Постоянный участник


Возраст: 27
Знак зодиака: Стрелец
Зарегистрирован: 04.06.2007
Сообщения: 149

СообщениеВс, 28-Окт-2007 19:15    Заголовок сообщения: CGI интерфейс для доступа к данным как исполняемая программа
Цитата

НЕОБХОДИМО:
Создаьть интерфейс CGI на основе исполняемых (.exe например) программ. Эти программы должны иметь доступ к СУБД.

КАК РЕШИЛА РЕАЛИЗОВАТЬ:
Решила писать их на имеющимся Delphi7 в виде Console Application.

ЧТО СДЕЛАЛА:
Я не буду сейчас сразу перечислять какой результат получила при использовании поочередно всех стандартных интерфейсов доступа к данным имеющихся в Дельфи, а начну по-порядку, а именно начну с BDE.

Все тривиально - в соответсвие с псевдонимом БД в BDE сформировала компонент DataBase:

uses
SysUtils,
DB,
DBTables;

var dtb: TDataBase;
t1: TQuery;

begin
writeln('Content-type: text/html');writeln;

dtb:=TDataBase.Create(nil);
dtb.name:='Database1';
dtb.DatabaseName:='db1';
dtb.AliasName:='[псевдоним БД]';
dtb.Params.Add('USER NAME=[логин к БД]');
dtb.Params.Add('PASSWORD=[пароль к БД]');
dtb.LoginPrompt:=false;
dtb.Open;

t1:=TQuery.Create(nil);
t1.DatabaseName:='db1';
t1.SQL.Add('SELECT * FROM USERS');
t1.Name:='t1';
t1.Active:=true;
end.

В ЧЕМ ПРОБЛЕМА:
На этапе создания и после компиляции приложение само по себе работает без сбоев, но при загрузке его как CGI-приложение в браузере возникает неопределенная ошибка (та что предлагает отправить отчет).
Хочу заметить, что данная проблема наблюдается во время установления соединения с БД (dtb.open) и когда подключение требует авторизации пользователя.
В то же время, когда подключение к БД не требует авторизации, например имеющиеся в Дельфи демонстрационные файлы Paradox, приложение работает отлично и в режиме CGI.
Логично подумать о том, что проблема в передачи параметров авторизации (логина и пароля), НО, напомню, приложение отлично работает с любыми СУБД самостоятельно, а глюк наблюдается лишь при загрузке из браузера,
т.е. в режиме CGI.

В чем причина? Почему ее нет при соединении с файл-серверными БД? Почему с остальными БД ее также нет, пока не запускаю программу в CGI-режиме?
В начало
Посмотреть профиль Отправить личное сообщение
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеВс, 28-Окт-2007 19:41 
Цитата

Предлагаю установить опцию Use debug DCUs и пришпилить перехватчик ошибок типа madExcept. Это поможет выяснить, что там за ошибка.
Еще, возможно, тебе понадобится просто добавить TSession

P.S. А разве приложение выдает результат через writeln? AFAIK, эта процедура не использует STDOUT, а ловит непосредственно консоль и выводит в нее. Т.е. для CGI как бы и не годится...

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Жен Kate
Постоянный участник


Возраст: 27
Знак зодиака: Стрелец
Зарегистрирован: 04.06.2007
Сообщения: 149

СообщениеВс, 28-Окт-2007 20:20 
Цитата

DrPass,
Использовала ту же самую схему, но с подключением к другой СУБД - MSSQL2005, все отлично работает и в режиме CGI и в режиме обычного приложения (при предыдущей попытке пробовала на FireBird). В принципе изначально и пишу под MSSQL, так что задача решена, но вопрос все таки вопрос будет оставаться открытым, пока действительно не проведу более детальный анализ ошибок, чем и займусь в свободное вр. (madExcept).

По-поводу Session, полагаю не делает в контекстве данного вопроса совершенно никокой погоды.

Добавлено спустя 3 минуты 31 секунду:

DrPass писал(а):

P.S. А разве приложение выдает результат через writeln? AFAIK, эта процедура не использует STDOUT, а ловит непосредственно консоль и выводит в нее. Т.е. для CGI как бы и не годится...


Видимо в Delphi функция write также как и read использует стандартные потоки вывода и ввода соотсветственно, иначе почему у меня все работает? :)
В начало
Посмотреть профиль Отправить личное сообщение
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеВс, 28-Окт-2007 20:34 
Цитата

to Kate
Наверное, у тебя сильно хорошая Delphi. Написанная на шестой версии программа меня ненавязчиво послала :)
Что касается TSession - BDE создает временные файлы и прочую ерунду. Насколько я помню юность, TSession помимо всего прочего позволяет это добро разрулить по разным папкам для разных приложений. Так что попробовать стоит. Хотя зачем ты с BDE связалась, непонятно...

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Жен Kate
Постоянный участник


Возраст: 27
Знак зодиака: Стрелец
Зарегистрирован: 04.06.2007
Сообщения: 149

СообщениеПн, 29-Окт-2007 8:28 
Цитата

DrPass,
Для MSSQL разумеется лучше использовать не BDE, а ADO. Просто дело в том, что я, как писала выше, испытывала эту вещь на FireBird, вот и взяла первый попавшийся подходящий для него на мой взгляд инструмент.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Gelios
Oracle-вый маньяк, Админ


Возраст: 37
Знак зодиака: Водолей
Зарегистрирован: 10.03.2005
Сообщения: 6141
Откуда: Яблочный рай
СообщениеСр, 31-Окт-2007 6:15 
Цитата

для FireBird самый подходящий инструмент - FibPlus
_________________
нельзя давать всем всего, ибо всех много, а всего мало
В начало
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100