![]() |
|
#1
|
|||
|
|||
![]() Добрый день
Помогите с оптимизацией кода Есть Форма авторизации при введении правильного логина и пароля Получаем из таблицы базы данных параметры главного меню основной формы в зависимости от роли пользователя Структура базы такова Таблица СпрПользователи связана с таблицей СпрГрупп которая связана с таблицей СпрИнтерфейсов Задачу решил так Код:
ADOQueryFase.Active:=False; ADOQueryFase.SQL.Clear; ADOQueryFase.SQL.Add('SELECT *'); ADOQueryFase.SQL.Add('FROM SprFase'); ADOQueryFase.SQL.Add('WHERE'); ADOQueryFase.SQL.Add('FaseID = '+InttoStr(IFaseID[H])+' '); ADOQueryFase.Open; //Настройка интерфейса IFACE:= ADOQueryFase.FieldValues['MClose']; if IFACE = 1 then IFACEBool:=True else IfaceBool:=False; MainForm.MainMenu.MClose.Visible:=IFACEBool; IFACE:= ADOQueryFase.FieldValues['MNewOrder']; if IFACE = 1 then IFACEBool:=True else IfaceBool:=False; MainForm.MainMenu.MNewOrder.Visible:=IFACEBool; IFACE:= ADOQueryFase.FieldValues['MUsers']; if IFACE = 1 then IFACEBool:=True else IfaceBool:=False; MainForm.MainMenu.MUsers.Visible:=IFACEBool; IFACE:= ADOQueryFase.FieldValues['MTMC']; if IFACE = 1 then IFACEBool:=True else IfaceBool:=False; MainForm.MainMenu.MTMC.Visible:=IFACEBool; IFACE:= ADOQueryFase.FieldValues['MContractor']; if IFACE = 1 then IFACEBool:=True else IfaceBool:=False; MainForm.MainMenu.MContractor.Visible:=IFACEBool; IFACE:= ADOQueryFase.FieldValues['MCatalog']; if IFACE = 1 then IFACEBool:=True else IfaceBool:=False; MainForm.MainMenu.MCatalog.Visible:=IFACEBool; IFACE:= ADOQueryFase.FieldValues['MSettings']; if IFACE = 1 then IFACEBool:=True else IfaceBool:=False; MainForm.MainMenu.MSettings.Visible:=IFACEBool; IFACE:= ADOQueryFase.FieldValues['MRegister']; if IFACE = 1 then IFACEBool:=True else IfaceBool:=False; MainForm.MainMenu.MRegister.Visible:=IFACEBool; IFACE:= ADOQueryFase.FieldValues['MRegister']; if IFACE = 1 then IFACEBool:=True else IfaceBool:=False; MainForm.MainMenu.MRegister.Visible:=IFACEBool; IFACE:= ADOQueryFase.FieldValues['MDoc']; if IFACE = 1 then IFACEBool:=True else IfaceBool:=False; MainForm.MainMenu.MDoc.Visible:=IFACEBool; IFACE:= ADOQueryFase.FieldValues['MReports']; if IFACE = 1 then IFACEBool:=True else IfaceBool:=False; MainForm.MainMenu.MReports.Visible:=IFACEBool; IFACE:= ADOQueryFase.FieldValues['MParameters']; if IFACE = 1 then IFACEBool:=True else IfaceBool:=False; MainForm.MainMenu.MParameters.Visible:=IFACEBool; Как можно более красиво решить данную задачу? Последний раз редактировалось Admin, 12.01.2015 в 19:46. |
#2
|
||||
|
||||
![]() Зачем столько лишнего кода?
Вместо всего этого: Код:
IFACE:= ADOQueryFase.FieldByName('MClose').AsBoolean; if IFACE = 1 then IFACEBool:=True else IfaceBool:=False; MainForm.MainMenu.MClose.Visible:=IFACEBool; Код:
MainForm.MainMenu.MClose.Visible:= ADOQueryFase.FieldByName('MClose').AsBoolean; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
![]() Дело в том что в MS SQL нет типа boolean
по этому в таблице Интерфейсов используется поля int 0 - отключено меню 1 - показывать меню |
#4
|
|||
|
|||
![]() Дело в том что в MS SQL нет типа boolean
по этому в таблице СпрИнтерфейсов используется поля int 0 - отключено меню 1 - показывать меню |
#5
|
||||
|
||||
![]() Если вдруг предложенный Страдальцем вариант не компилируется (что очень странно), то можно записать то же самое как
Код:
MainForm.MainMenu.MClose.Visible:= ADOQueryFase.FieldByName('MClose') = 1; jmp $ ; Happy End! The Cake Is A Lie. |
#6
|
|||
|
|||
![]() При Вашем коде ошибка [dcc32 Error] LoginUnit.pas(96): E2015 Operator not applicable to this operand type
При Коде Страдальца ошибка не при компиляции, а выдается программой Cannot access field 'MClose' as type Boolean |
#7
|
||||
|
||||
![]() Ну а так попробуйте?
Цитата:
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#8
|
|||
|
|||
![]() Спасибо работает
Если не трудно объясните выражение ADOQueryFase.FieldValues['MClose'] = 1; Не могу понять логику ADOQueryFase.FieldValues['MClose'] принимает значение 0 или 1 т.е. MainForm.MClose.Visible:= 0=1 или MainForm.MClose.Visible:= 1=1 |
#9
|
|||
|
|||
![]() Цитата:
выражение 1=1 имеет тип Boolean и значение false, и его можно не только использовать в операторе if, но и присвоить чему-нибудь, тоже имеющему тип Boolean, например, свойству Visible. |
#10
|
|||
|
|||
![]() Спасибо всем за помощь
|