EhLib Exception

  • Автор темы tarakan19832
  • 1477
  • Обновлено
  • 03, Nov 2016
  • #1
Здравствуйте.

У меня проблема с компонентом DbGridEh. У меня программа с авторизацией, т.е. сначала показывается форма FmLogin, а после успешной авторизации попадаем в главную форму FmMain.

Так вот если авторизоваться, и потом закрыть программу, то все нормально, а вот если отменить авторизацию или просто закрыть форму FmLogin – то получаю Exception.

В версии 8.1 этого не было, началось с 8.2 и на 9 версии тоже самое.

Если убрать сетку с главной формы, то все в порядке.

Пример прилагаю.

Тест_проект

tarakan19832


Рег
12 Aug, 2016

Тем
3

Постов
7

Баллов
37
  • 04, Nov 2016
  • #2
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.

Попробуй так, например...

Т.е. сделай авторизацию до создания главной формы
 

mike-d


Рег
20 Jun, 2004

Тем
1

Постов
8

Баллов
18
  • 05, Nov 2016
  • #3
Я тоже так хочу переделать, но пока это невозможно, у меня при авторизации с формы login на FmMain меняются много контролов, если так то придется переписывать всю процедуру авторизации.
 

tarakan1983


Рег
30 Jul, 2016

Тем
0

Постов
5

Баллов
5
  • 05, Nov 2016
  • #4
tarakan1983, post: 767740:
Я тоже так хочу переделать, но пока это невозможно, у меня при авторизации с формы login на FmMain меняются много контролов, если так то придется переписывать всю процедуру авторизации.
Поддерживаю предыдущего оратора.

Если стоит такая задача, что в зависимости от прав доступа разрешать те или иные функции программы, то у афтара неверная реализация. Изучи TActionList.

Там в событии Update можно разрешать, запрещать, показывать, скрывать - в общем, что хочешь делать в зависимости от условий.
 

mike-d


Рег
20 Jun, 2004

Тем
1

Постов
8

Баллов
18
  • 05, Nov 2016
  • #5
LeshaRB, post: 767741:
Какие контролы могут меняться если суть авторитизации дать доступ или нет?




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



Просто где-то в недрах компонента неправильно уничтожаются классы Ehlib, думал может кто подскажет, что поменять в исходниках компоненты, может там проблема в одной - двух строчках, а теперь придется переписывать всю авторизацию.
 

tarakan1983


Рег
30 Jul, 2016

Тем
0

Постов
5

Баллов
5
  • 05, Nov 2016
  • #6
Переписать авторитизацию Да и авторитизация у тебя не правильно если это, что ты дал как пример У тебя создаются все формы, а должны создаваться после прохождения Вверху была пример, его доработать надо
 

LeshaRB


Рег
11 Jun, 2007

Тем
5

Постов
110

Баллов
160
  • 06, Nov 2016
  • #7
tarakan1983, post: 767743:
При успешной авторизации на статус бар главной формы наноситься текущий пользователь, права пользователя, версия клиента программы, текущая организация, текущее подразделение организации, расположение БД и т.п.
И все это делается в модуле авторизации? Какой славный глюкодром...
 

mike-d


Рег
20 Jun, 2004

Тем
1

Постов
8

Баллов
18
  • 14, Nov 2016
  • #8
Приложенный пример не смотрел, с телефона сижу, но как вариант... На главной форме, в Create, создавать окно с авторизацией, прошла вызов нужных настроек, не прошла, то вызов настроек для не авторизованного пользователя, или выход из программы...
 

_user_


Рег
16 Jan, 2013

Тем
0

Постов
6

Баллов
6
  • 21, Nov 2016
  • #9
А в каком модуле Вы мне посоветуете это все сделать?
да тут не в модуле дело. Просто это делать правильнее через call-back функцию. Хотя если модуль гл.формы и авторизации в пределах одного приложения - все будет нормально и так. Добавлено через 19 минут
tarakan19832, post: 767736:
Здравствуйте. У меня проблема с компонентом DbGridEh.
Бывают такие глюки не только с эхлибом.

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

Т.е. в вашем случае что-то вроде этого: Application.CreateForm(TFmMain, FmMain); Application.CreateForm(TFmLogin, FmLogin); if FmLogin.ShowModal = mrCancel then begin FmMain.Free; Application.Terminate; end else Application.Run; Если не поможет, тогда уже менять версию компонента))
 

under44


Рег
29 Jun, 2011

Тем
0

Постов
6

Баллов
6
  • 21, Nov 2016
  • #10
under44, post: 767748:
да тут не в модуле дело. Просто это делать правильнее через 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


Рег
11 Jun, 2007

Тем
5

Постов
110

Баллов
160
  • 21, Nov 2016
  • #11
Прошел авторизацию - создал главную форму - расположил все компоненты как надо - отобразил
 

LeshaRB


Рег
11 Jun, 2007

Тем
5

Постов
110

Баллов
160
  • 21, Nov 2016
  • #12
LeshaRB, post: 767750:
Прошел авторизацию - создал главную форму - расположил все компоненты как надо - отобразил
Ну это простейший случай. Например, у меня на главной (назовем ее условно) форме располагается главный FDConnection. При авторизации у меня как раз происходит управление соединением с БД. Поэтому главная форма обязана существовать до авторизации.
 

under44


Рег
29 Jun, 2011

Тем
0

Постов
6

Баллов
6
  • 22, Nov 2016
  • #13
under44, post: 767751:
Ну это простейший случай. Например, у меня на главной (назовем ее условно) форме располагается главный FDConnection.
При авторизации у меня как раз происходит управление соединением с БД. Поэтому главная форма обязана существовать до авторизации.
Pena, em Russo não entendo nada
 

cleao


Рег
22 Apr, 2011

Тем
0

Постов
5

Баллов
5
  • 23, Nov 2016
  • #14
under44, post: 767751:
Ну это простейший случай. Например, у меня на главной (назовем ее условно) форме располагается главный FDConnection.
При авторизации у меня как раз происходит управление соединением с БД. Поэтому главная форма обязана существовать до авторизации.
Connection (точное название не помню DataSoruce может, давно не работа) на форму не должны располагаться Смотри в сторону DataMOdule раньше такая штука еще была, типо формы для соединений
 

LeshaRB


Рег
11 Jun, 2007

Тем
5

Постов
110

Баллов
160
  • 23, Nov 2016
  • #15
LeshaRB, post: 767753:
Connection (точное название не помню DataSoruce может, давно не работа) на форму не должны располагаться

Смотри в сторону DataMOdule раньше такая штука еще была, типо формы для соединений
Не... DataSoruce это немного другое, это для связывания визуальных БД-компонент с данными.

Connection он так и называется, это отдельный компонент.

Хотя не суть важно. Ну я потому и назвал условно "главная форма". Запрета на расположение Connection на обычной форме вроде как нету, это вопрос удобства.

В целом при использовании DataModule, порядок остается тем же. Перед авторизацией мы создаем DataModule, вместо главной формы.

Ну без визуальных компонент, да. Оно так-то и обычную форму никто не мешает использовать пустую, вместо Дата Модуля.

Но это идеал - полностью разделить модуль данных и визуальных компонент.

А на деле получается, что быстрей все надо и делаешь как проще.

В целом, на мой взгляд, нету ничего криминального в том, чтобы на главную форму вешать connection и прочее. И вышеописанная ошибка , я думаю, все-таки не из-за неправильного подхода прикладного программиста..
 

under44


Рег
29 Jun, 2011

Тем
0

Постов
6

Баллов
6
  • 23, Nov 2016
  • #16
Я не знаю что у тебя, Но это были стандарты в свое время так работать (можно все на одну форму накидать и потом разбираться)
 

LeshaRB


Рег
11 Jun, 2007

Тем
5

Постов
110

Баллов
160
  • 14, Dec 2016
  • #17
Если попробовать принудительно удалить формы перед закрытием всё будет ок: delete MFORM; Application->Terminate();
 

Goodydim


Рег
12 Mar, 2011

Тем
0

Постов
4

Баллов
4
  • 25, Dec 2016
  • #18
if FmLogin.ShowModal = mrCancel then {Application.Terminate}FmMain.Free else Application.Run Например, так - если уж очень хочется именно этот подход оставить
 

S_Gur


Рег
26 Feb, 2007

Тем
3

Постов
27

Баллов
57
  • 13, Mar 2017
  • #19
Не... DataSoruce это немного другое, это для связывания визуальных БД-компонент с данными.

Connection он так и называется, это отдельный компонент.

Хотя не суть важно. Ну я потому и назвал условно "главная форма". Запрета на расположение Connection на обычной форме вроде как нету, это вопрос удобства.

В целом при использовании DataModule, порядок остается тем же. Перед авторизацией мы создаем DataModule, вместо главной формы.

Ну без визуальных компонент, да. Оно так-то и обычную форму никто не мешает использовать пустую, вместо Дата Модуля.

Но это идеал - полностью разделить модуль данных и визуальных компонент.

А на деле получается, что быстрей все надо и делаешь как проще.

В целом, на мой взгляд, нету ничего криминального в том, чтобы на главную форму вешать connection и прочее. И вышеописанная ошибка , я думаю, все-таки не из-за неправильного подхода прикладного программиста..
 

ser-klin


Рег
15 Feb, 2017

Тем
0

Постов
8

Баллов
8
  • 30, Jun 2017
  • #20
Прошел авторизацию - создал главную форму -Смотри в сторону DataMOdule раньше такая штука еще была
 

amirrf


Рег
12 Nov, 2008

Тем
0

Постов
2

Баллов
2
Тем
49554
Комментарии
57426
Опыт
552966

Интересно