EhLib Exception

tarakan19832

Турист
Здравствуйте. У меня проблема с компонентом DbGridEh.
У меня программа с авторизацией, т.е. сначала показывается форма FmLogin, а после успешной авторизации попадаем в главную форму FmMain. Так вот если авторизоваться, и потом закрыть программу, то все нормально, а вот если отменить авторизацию или просто закрыть форму FmLogin – то получаю Exception. В версии 8.1 этого не было, началось с 8.2 и на 9 версии тоже самое. Если убрать сетку с главной формы, то все в порядке. Пример прилагаю.
Тест_проект
 

mike-d

Турист
program Logon;
uses
Forms,
FormMain in 'FormMain.pas' {fmMain},
FormLogon in 'FormLogon.pas' {fmLogon};

{$R *.res}

var
fmLogon: TfmLogon;
LogonOK: Boolean;
begin
Application.Initialize;
fmLogon := TfmLogon.Create( nil );
LogonOK := fmLogon.ShowModal = mrOk;
fmLogon.Free;
if LogonOK then begin
Application.CreateForm(TfmMain, fmMain);
Application.Run;
end;
end.

Попробуй так, например...
Т.е. сделай авторизацию до создания главной формы
 
Last edited by a moderator:

tarakan1983

Турист
Я тоже так хочу переделать, но пока это невозможно, у меня при авторизации с формы login на FmMain меняются много контролов, если так то придется переписывать всю процедуру авторизации.
 

LeshaRB

Завсегдатай
Staff member
Moderator
Какие контролы могут меняться если суть авторитизации дать доступ или нет?
 

mike-d

Турист
Я тоже так хочу переделать, но пока это невозможно, у меня при авторизации с формы login на FmMain меняются много контролов, если так то придется переписывать всю процедуру авторизации.
Поддерживаю предыдущего оратора.
Если стоит такая задача, что в зависимости от прав доступа разрешать те или иные функции программы, то у афтара неверная реализация.
Изучи TActionList. Там в событии Update можно разрешать, запрещать, показывать, скрывать - в общем, что хочешь делать в зависимости от условий.
 

tarakan1983

Турист
Какие контролы могут меняться если суть авторитизации дать доступ или нет?
При успешной авторизации на статус бар главной формы наноситься текущий пользователь, права пользователя, версия клиента программы, текущая организация, текущее подразделение организации, расположение БД и т.п. Я согласен, что это надо было хранить в глобальных переменных и потом на formcreate главной формы их менять, но начиналось это делать на EhLib 8.1, там такого не наблюдалось и все работало нормально, появилась необходимость обновить компонент и теперь такая фигня.
Просто где-то в недрах компонента неправильно уничтожаются классы Ehlib, думал может кто подскажет, что поменять в исходниках компоненты, может там проблема в одной - двух строчках, а теперь придется переписывать всю авторизацию.
 

LeshaRB

Завсегдатай
Staff member
Moderator
Переписать авторитизацию

Да и авторитизация у тебя не правильно если это, что ты дал как пример
У тебя создаются все формы, а должны создаваться после прохождения

Вверху была пример, его доработать надо
 

mike-d

Турист
При успешной авторизации на статус бар главной формы наноситься текущий пользователь, права пользователя, версия клиента программы, текущая организация, текущее подразделение организации, расположение БД и т.п.
И все это делается в модуле авторизации?
Какой славный глюкодром...
 

LeshaRB

Завсегдатай
Staff member
Moderator
да тут не в модуле дело. Просто это делать правильнее через call-back функцию. Хотя если модуль гл.формы и авторизации в пределах одного приложения - все будет нормально и так.

Добавлено через 19 минут


Бывают такие глюки не только с эхлибом. Единственное, что можно посоветовать - освобождать главную форму перед завершением работы. Т.е. в вашем случае что-то вроде этого:

Application.CreateForm(TFmMain, FmMain);
Application.CreateForm(TFmLogin, FmLogin);
if FmLogin.ShowModal = mrCancel then
begin
FmMain.Free;
Application.Terminate;
end else
Application.Run;

Если не поможет, тогда уже менять версию компонента))
Зачем создавать главную форму до авторитизации?
 

LeshaRB

Завсегдатай
Staff member
Moderator
Прошел авторизацию - создал главную форму - расположил все компоненты как надо - отобразил
 

under44

Турист
Прошел авторизацию - создал главную форму - расположил все компоненты как надо - отобразил
Ну это простейший случай. Например, у меня на главной (назовем ее условно) форме располагается главный FDConnection.
При авторизации у меня как раз происходит управление соединением с БД. Поэтому главная форма обязана существовать до авторизации.
 

LeshaRB

Завсегдатай
Staff member
Moderator
Ну это простейший случай. Например, у меня на главной (назовем ее условно) форме располагается главный FDConnection.
При авторизации у меня как раз происходит управление соединением с БД. Поэтому главная форма обязана существовать до авторизации.
Connection (точное название не помню DataSoruce может, давно не работа) на форму не должны располагаться

Смотри в сторону DataMOdule раньше такая штука еще была, типо формы для соединений
 
Top