| Автор
| Сообщение |
 Kate
Постоянный участник

Возраст: 27
Знак зодиака: 
Зарегистрирован: 04.06.2007
Сообщения: 149
|
|
|
Цитата |
|
НЕОБХОДИМО:
Создаьть интерфейс 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
Откуда: Донецк
|
|
|
Цитата |
|
Предлагаю установить опцию Use debug DCUs и пришпилить перехватчик ошибок типа madExcept. Это поможет выяснить, что там за ошибка.
Еще, возможно, тебе понадобится просто добавить TSession
P.S. А разве приложение выдает результат через writeln? AFAIK, эта процедура не использует STDOUT, а ловит непосредственно консоль и выводит в нее. Т.е. для CGI как бы и не годится... _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
 Kate
Постоянный участник

Возраст: 27
Знак зодиака: 
Зарегистрирован: 04.06.2007
Сообщения: 149
|
|
|
Цитата |
|
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
Откуда: Донецк
|
|
|
Цитата |
|
to Kate
Наверное, у тебя сильно хорошая Delphi. Написанная на шестой версии программа меня ненавязчиво послала
Что касается TSession - BDE создает временные файлы и прочую ерунду. Насколько я помню юность, TSession помимо всего прочего позволяет это добро разрулить по разным папкам для разных приложений. Так что попробовать стоит. Хотя зачем ты с BDE связалась, непонятно... _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
 Kate
Постоянный участник

Возраст: 27
Знак зодиака: 
Зарегистрирован: 04.06.2007
Сообщения: 149
|
|
|
Цитата |
|
DrPass,
Для MSSQL разумеется лучше использовать не BDE, а ADO. Просто дело в том, что я, как писала выше, испытывала эту вещь на FireBird, вот и взяла первый попавшийся подходящий для него на мой взгляд инструмент. |
|
| В начало |
|
 |
 Gelios
Oracle-вый маньяк, Админ

Возраст: 37
Знак зодиака: 
Зарегистрирован: 10.03.2005
Сообщения: 6141
Откуда: Яблочный рай
|
|
|
Цитата |
|
для FireBird самый подходящий инструмент - FibPlus _________________ нельзя давать всем всего, ибо всех много, а всего мало |
|
| В начало |
|
 |
|