![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 24.04.2012
Сообщений: 24
|
![]()
Искал через поиск, но так ниче и не нашел(
Есть форма авторизации, бд юзеров в access. Никак не могу настроить, чтобы при переходе пользователя отображались на форме одни компоненты, а при переходе администратора другие. Пробовал так, но не работает procedure TForm1.FormActivate(Sender: TObject); begin if (DataModule2.AdoTable3.FieldValues['Категория']='user') then N1.Visible:=false; end; оно вообще это элемент не выводит ни для одной категории, ни для другой |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 21.05.2008
Сообщений: 495
|
![]()
N1.Visible:=false;
Ну так он и делает фалс, т.е. не отображать! А можно спросить как вы отличаетеа администратора от обычного юзера? Просто названием логина User / Administrator ? Что это N1? Пункт меню? дайте больше кода... |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 24.04.2012
Сообщений: 24
|
![]()
Есть в бд таблица Pass, в ней Login, Password, Категории(в ней значения user или admin). Есть окно авторизации для входа на основную форму
вот код procedure TForm6.Button1Click(Sender: TObject); var s1: string; begin datamodule2.adoquery2.close; datamodule2.adoquery2.sql.clear; s1:='select * from Pass where Login='+QuotedStr(edit1.text)+'and Password='+QuotedStr(Edit2.text); datamodule2.adoquery2.sql.add(s1); datamodule2.adoquery2.active:=true; datamodule2.adoquery2.open; if not datamodule2.adoquery2.isEmpty then begin form1.Visible:= false; Edit1.Clear; Edit2.Clear; Application.Initialize; Form6.Free; Application.CreateForm(TForm1,Form1 ) ; Application.Run; end else ShowMessage('Неправильно введены Login#Pass пожалуйста пройдите регистрацию') ; end; при вводе логина и пароля и нажатии кнопки нужно чтобы открывалась новая форма и если это из категории пользователь, то не отображались пункты с mainmenu, а если из категории администратор, то все отображалось... я поставил, что при открытии формы, будет убираться компонент, вот код procedure TForm1.FormActivate(Sender: TObject); begin if DataModule2.AdoTable3.FieldValues['Категория']='user' then N1.Visible:=false; end; |
![]() |
![]() |
![]() |
#4 | |
Форумчанин
Регистрация: 21.05.2008
Сообщений: 495
|
![]()
ну я вот думаю что логин должен быть индивидуален, ну да ладна, бывают ситуации что инициалы у людей полностьб идентичны..
Ну ненравится мне это ![]() Цитата:
по которой вы какя понимаю определяете категорию, он будит считывать запись накоторой находится после последних манипуляций если ни чо не делалось то на первой записи. Попробуйте так if DataModule2.adoquery2.FieldValues['Категория']='user' then N1.Visible:=false; И мой совет сделать логически подругому, сразу же после удачной авторизации пользоввателя проверять, если администартор то сделать визибле=тру, а изначально поставить фалс те пункты меню что не дожны быт ьдоступны ползователю |
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 21.05.2008
Сообщений: 495
|
![]()
ДА и делат ьпроверку тоже советую делат ьподругому, делать финт по АДОтабле, т.е. если такого пользователя не найдено сразу выводить сообшения что вы не найдены, если найдены то проверять пароль, соотвествено и указатель будит стоят на нужной нам записе, и останется только считать нужный вам параметр категории пользователя производяшего авторизацию в базу...
НО если исльзовать AdoTable.Locate помните что он встанет на первую найденыую запись... НУ и подумайте что если у вас в базе произойдёт такое что будит два одинаковых имени опльзователя и пароля, запрсо выведит две записи, как вы это будите обрабатывать? И никогда не создавайте поля в базе КИРИЛИЦЕЙ Последний раз редактировалось Dozent; 25.04.2012 в 00:30. |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 21.05.2008
Сообщений: 495
|
![]()
ну и ешё вы помойму не правильно обращаетесь
MainMenu1.N1.VIsible:=false; наверное так надо |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 24.04.2012
Сообщений: 24
|
![]()
Спасибо огромное, но я немного не понял и сделал так, все вроде заработало, только не выводит окно если данные введены неверно)
procedure TForm6.Button1Click(Sender: TObject); begin if ((DataModule2.AdoTable3.Locate('Log in',edit1.Text,[])) and (DataModule2.AdoTable3.FieldValues['Password']=edit2.Text)) then begin if DataModule2.AdoTable3.FieldValues['Catagory']='admin' then begin form1.N1.Visible:=true; Application.Initialize; Form6.Free; Application.CreateForm(TForm1,Form1 ) ; Application.Run; end else begin if DataModule2.AdoTable3.FieldValues['Catagory']='user' then begin form1.N1.Visible:=false; Application.Initialize; Form6.Free; Application.CreateForm(TForm1,Form1 ) ; Application.Run; end else ShowMessage('Вы ввели неправильный пароль или логин'); end end; |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 21.05.2008
Сообщений: 495
|
![]() Код:
Последний раз редактировалось Dozent; 25.04.2012 в 01:24. |
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 21.05.2008
Сообщений: 495
|
![]()
ну ирациональынм будит оптимизировать код
Код:
|
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 24.04.2012
Сообщений: 24
|
![]()
Спасибо огромное, остановлюсь пока на этом
![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
В массиве из п элементов много совпадающих элементов. Найти количество различных элементов | Strax | Фриланс | 11 | 12.06.2010 20:13 |
скрытие символов | Neymexa | Microsoft Office Access | 4 | 06.05.2010 09:09 |
Скрытие листов. | frozzy_16 | Microsoft Office Excel | 7 | 18.03.2010 17:57 |
Скрытие <> | Яр|/||< (^_^) | Общие вопросы Delphi | 6 | 20.10.2009 17:17 |
Скрытие программы | Romzes2 | Общие вопросы Delphi | 8 | 28.08.2007 21:53 |