EhLib Exception

tarakan19832

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

tarakan1983

Member
Joined
Jul 30, 2016
Messages
8
Reaction score
0
Ну если его нет на главной форме то Exception нет
 

mike-d

Member
Joined
Jun 20, 2004
Messages
9
Reaction score
2
Age
62
Location
Владимир
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

Member
Joined
Jul 30, 2016
Messages
8
Reaction score
0
Я тоже так хочу переделать, но пока это невозможно, у меня при авторизации с формы login на FmMain меняются много контролов, если так то придется переписывать всю процедуру авторизации.
 

LeshaRB

Staff member
Premium
Joined
Jun 11, 2007
Messages
319
Reaction score
451
Location
Минск
Какие контролы могут меняться если суть авторитизации дать доступ или нет?
 

mike-d

Member
Joined
Jun 20, 2004
Messages
9
Reaction score
2
Age
62
Location
Владимир
Я тоже так хочу переделать, но пока это невозможно, у меня при авторизации с формы login на FmMain меняются много контролов, если так то придется переписывать всю процедуру авторизации.

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

tarakan1983

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

LeshaRB

Staff member
Premium
Joined
Jun 11, 2007
Messages
319
Reaction score
451
Location
Минск
Переписать авторитизацию

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

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

mike-d

Member
Joined
Jun 20, 2004
Messages
9
Reaction score
2
Age
62
Location
Владимир
При успешной авторизации на статус бар главной формы наноситься текущий пользователь, права пользователя, версия клиента программы, текущая организация, текущее подразделение организации, расположение БД и т.п.

И все это делается в модуле авторизации?
Какой славный глюкодром...
 

tarakan1983

Member
Joined
Jul 30, 2016
Messages
8
Reaction score
0
А в каком модуле Вы мне посоветуете это все сделать?
 

LeshaRB

Staff member
Premium
Joined
Jun 11, 2007
Messages
319
Reaction score
451
Location
Минск
да тут не в модуле дело. Просто это делать правильнее через 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
Premium
Joined
Jun 11, 2007
Messages
319
Reaction score
451
Location
Минск
Прошел авторизацию - создал главную форму - расположил все компоненты как надо - отобразил
 

under44

New member
Joined
Jun 29, 2011
Messages
3
Reaction score
0
Прошел авторизацию - создал главную форму - расположил все компоненты как надо - отобразил

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

LeshaRB

Staff member
Premium
Joined
Jun 11, 2007
Messages
319
Reaction score
451
Location
Минск
Ну это простейший случай. Например, у меня на главной (назовем ее условно) форме располагается главный FDConnection.
При авторизации у меня как раз происходит управление соединением с БД. Поэтому главная форма обязана существовать до авторизации.

Connection (точное название не помню DataSoruce может, давно не работа) на форму не должны располагаться

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

under44

New member
Joined
Jun 29, 2011
Messages
3
Reaction score
0
Connection (точное название не помню DataSoruce может, давно не работа) на форму не должны располагаться

Смотри в сторону DataMOdule раньше такая штука еще была, типо формы для соединений
Не... DataSoruce это немного другое, это для связывания визуальных БД-компонент с данными. Connection он так и называется, это отдельный компонент. Хотя не суть важно.
Ну я потому и назвал условно "главная форма". Запрета на расположение Connection на обычной форме вроде как нету, это вопрос удобства.
В целом при использовании DataModule, порядок остается тем же. Перед авторизацией мы создаем DataModule, вместо главной формы.
Ну без визуальных компонент, да. Оно так-то и обычную форму никто не мешает использовать пустую, вместо Дата Модуля. Но это идеал - полностью разделить модуль данных и визуальных компонент...
А на деле получается, что быстрей все надо и делаешь как проще. В целом, на мой взгляд, нету ничего криминального в том, чтобы на главную форму вешать connection и прочее.
И вышеописанная ошибка , я думаю, все-таки не из-за неправильного подхода прикладного программиста..
 
Last edited by a moderator:

LeshaRB

Staff member
Premium
Joined
Jun 11, 2007
Messages
319
Reaction score
451
Location
Минск
Я не знаю что у тебя,
Но это были стандарты в свое время так работать (можно все на одну форму накидать и потом разбираться)
 
Top