Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2012, 23:00   #1
haker270
Пользователь
 
Регистрация: 24.04.2012
Сообщений: 24
По умолчанию Скрытие элементов

Искал через поиск, но так ниче и не нашел(
Есть форма авторизации, бд юзеров в access.
Никак не могу настроить, чтобы при переходе пользователя отображались на форме одни компоненты, а при переходе администратора другие. Пробовал так, но не работает
procedure TForm1.FormActivate(Sender: TObject);
begin
if (DataModule2.AdoTable3.FieldValues['Категория']='user')
then
N1.Visible:=false;

end;
оно вообще это элемент не выводит ни для одной категории, ни для другой
haker270 вне форума Ответить с цитированием
Старый 24.04.2012, 23:56   #2
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

N1.Visible:=false;

Ну так он и делает фалс, т.е. не отображать!
А можно спросить как вы отличаетеа администратора от обычного юзера?
Просто названием логина User / Administrator ?
Что это N1? Пункт меню? дайте больше кода...
Dozent вне форума Ответить с цитированием
Старый 25.04.2012, 00:09   #3
haker270
Пользователь
 
Регистрация: 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;
haker270 вне форума Ответить с цитированием
Старый 25.04.2012, 00:24   #4
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

ну я вот думаю что логин должен быть индивидуален, ну да ладна, бывают ситуации что инициалы у людей полностьб идентичны..
Ну ненравится мне это
Цитата:
s1:='select * from Pass where Login='+QuotedStr(edit1.text)+'and Password='+QuotedStr(Edit2.text);
Вовторых я в коде не увидил ни каких поисков и ни каких фильтраций по AdoTable3
по которой вы какя понимаю определяете категорию, он будит считывать запись накоторой находится после последних манипуляций если ни чо не делалось то на первой записи. Попробуйте так

if DataModule2.adoquery2.FieldValues['Категория']='user'
then
N1.Visible:=false;

И мой совет сделать логически подругому, сразу же после удачной авторизации пользоввателя проверять, если администартор то сделать визибле=тру, а изначально поставить фалс те пункты меню что не дожны быт ьдоступны ползователю
Dozent вне форума Ответить с цитированием
Старый 25.04.2012, 00:27   #5
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

ДА и делат ьпроверку тоже советую делат ьподругому, делать финт по АДОтабле, т.е. если такого пользователя не найдено сразу выводить сообшения что вы не найдены, если найдены то проверять пароль, соотвествено и указатель будит стоят на нужной нам записе, и останется только считать нужный вам параметр категории пользователя производяшего авторизацию в базу...
НО если исльзовать AdoTable.Locate помните что он встанет на первую найденыую запись...
НУ и подумайте что если у вас в базе произойдёт такое что будит два одинаковых имени опльзователя и пароля, запрсо выведит две записи, как вы это будите обрабатывать?

И никогда не создавайте поля в базе КИРИЛИЦЕЙ

Последний раз редактировалось Dozent; 25.04.2012 в 00:30.
Dozent вне форума Ответить с цитированием
Старый 25.04.2012, 00:39   #6
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

ну и ешё вы помойму не правильно обращаетесь

MainMenu1.N1.VIsible:=false; наверное так надо
Dozent вне форума Ответить с цитированием
Старый 25.04.2012, 01:00   #7
haker270
Пользователь
 
Регистрация: 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;
haker270 вне форума Ответить с цитированием
Старый 25.04.2012, 01:16   #8
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Код:
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 if DataModule2.AdoTable3.FieldValues['Catagory']='user' then
           begin
            form1.N1.Visible:=false;
            Application.Initialize;
            Form6.Free;
            Application.CreateForm(TForm1,Form1 ) ;
            Application.Run;
           end;
  end
  else ShowMessage('Âû ââåëè íåïðàâèëüíûé ïàðîëü èëè ëîãèí');
Учитесь делать красивое написание кода, тогда сразу видно где начинаются и заканчиваются условия, и всё таки советую сделать логин не повторяющимся и делать пароль не в открытом виде, а в защищёном, и считывать его только после того как будит найден пользователь в базе.

Последний раз редактировалось Dozent; 25.04.2012 в 01:24.
Dozent вне форума Ответить с цитированием
Старый 25.04.2012, 01:22   #9
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

ну ирациональынм будит оптимизировать код

Код:
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;
      end
      else
       begin
        form1.N1.Visible:=false;
       end;
   Application.Initialize;
   Form6.Free;
   Application.CreateForm(TForm1,Form1 ) ;
   Application.Run;
  end
  else ShowMessage('Âû ââåëè íåïðàâèëüíûé ïàðîëü èëè ëîãèí');
end;
Dozent вне форума Ответить с цитированием
Старый 25.04.2012, 16:44   #10
haker270
Пользователь
 
Регистрация: 24.04.2012
Сообщений: 24
По умолчанию

Спасибо огромное, остановлюсь пока на этом
haker270 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В массиве из п элементов много совпадающих элементов. Найти количество различных элементов 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