![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FibPlus в клиент-серверном приложении [D7, Firebird]
Rusland © (2010-04-13 12:48:00)Добрый день.
Пишу клиент-вебсерверное приложение (SOAP).
В серверной части в WebModule (Unit1.pas) добавил компоненты FibPlus: TpFIBDatabase, TpFIBTransaction, TpFIBDataSet.
Настроил подключение к своей базе данных и хочу просто передать какое-нибудь значение из базы в клиентскую часть
(потом хочу передавать весь датасет, но это потом).
Написал функцию для обращения к таблице из базы (S1Impl.pas)
...
function Ts1.GetDataFromBase(s:AnsiString): AnsiString; stdcall;
begin
Log('Начало функции'); // ведем лог в файл
try
WM.FbDatabase.Connected:=true; // здесь выдает Access Violation
WM.FbFirms.Active:=true;
Result:=WM.FbFirmsFIRMA.AsString;
WM.FbDatabase.Connected:=false;
except
on E: Exception do Log('Произошла ошибка '+E.Message); //, E.HelpContext
end;
Log('Конец функции');
end;
WM - это TWM = class(TWebModule)
FbDatabase: TpFIBDatabase;
FbFirms: TpFIBDataSet;
При вызове функции из клиентского приложения я получаю "Access violation at address 0055F78F in module 'webserv1.exe'. Read of address 000000AC" на строке WM.FbDatabase.Connected:=true;
Если не обращаться к базе данных, то все нормально - никаких ошибок.
После долгих экспериментов увидел, что "Ахсекс виалейшн" вываливается при любом обращении к любому свойству/методу FbDatabase.
Похоже что на момент обращения не создан сам WebModule (WM). Как это проверить?
PS. Использую BDS2006, FibPlus, Firebird2.0.1, сервер Apache
Ссылка на исходники:
http://www.onlinedisk.ru/file/405488/(клиентская часть)
http://www.onlinedisk.ru/file/405493/(серверная часть)
Rusland (2010-04-13 15:38:00) [21]Медвежонок Пятачок, Anatoly Podgoretsky
Ткните носом пожалуйста что и где прописать?
У меня же прописано создание WM
program WebServ1;
{$APPTYPE CONSOLE}
uses
WebBroker,
CGIApp,
Unit1 in 'Unit1.pas' {WM: TWebModule},
S1Intf in 'S1Intf.pas',
S1Impl in 'S1Impl.pas';
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TWM, WM); // разьве этого недостаточно?
Application.Run;
end.
Anatoly Podgoretsky (2010-04-13 13:28:00) [22]Это проверять не надо, а надо делать так чтобы не проверять
Медвежонок Пятачок (2010-04-13 13:04:00) [23]зачем это проверять, это и так из контекста ясно что не создан.