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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2012, 18:15   #1
MoToP4uK
 
Регистрация: 13.02.2012
Сообщений: 3
По умолчанию Обработка логических полей

Вопрос следующего рода.
Есть БД table1(Access) в ней таблица dop
Поля id, login, pass, admin, prepod последние 2 поля логические
Необходимо проводить проверку пароля, логина и конечно этих логических полей. Если admin истина то - 1 форма, если prepod - 2 форма, если оба лож то 3 форма( при правильности пароля и лога). Подскажите в кратце как это осуществить. За ранее благодарен.
MoToP4uK вне форума Ответить с цитированием
Старый 13.02.2012, 20:32   #2
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Лучше бы запросом, то есть не Ttable, а Tquery использовать, и запросом просто

Код:
query.sql.text:='select admin, prepod from dop where login = '+quotedstr(edit_login.text)+' and pass = '+quotedstr(edit_login.text);
query.open;
if query.recordcount>0 then
begin
 if query.fieldbyname(admin).asboolean and not query.fieldbyname(prepod).asboolean then
//тут чего делать если админ
 if not query.fieldbyname(admin).asboolean and  query.fieldbyname(prepod).asboolean 
//тут чего делать если препод
 if  query.fieldbyname(admin).asboolean and  query.fieldbyname(prepod).asboolean 
//тут чего делать если препод и к тому же админ))
 if  not query.fieldbyname(admin).asboolean and not  query.fieldbyname(prepod).asboolean 
//тут чего делать если не пойми кто
для этого я бы создал отдельную форму с запросом пароля, потом переписал бы ручками DPR то есть убрал бы все автоматически создаваемые формы, и дпр стал выглядеть примерно так
Код:
program kakoy_nado_program;
{$IMAGEBASE $00400000}

uses
  Forms,
  sysutils, //ну и ещё какие надо модули
  Unit1 in 'Unit1.pas' {Form_admin},
  Unit2 in 'Unit2.pas' {Form_prepod},
  Unit3 in 'Unit3.pas' {Form_super_admin_prepod},
  Unit4 in 'Unit4.pas' {Form_ktoto_iz_tolpy},
   PassWord in 'PassWord.pas' {PasswordDlg};

{$R *.res}
var
frmpswrd:TPasswordDlg;
begin
  Application.Initialize;
     Application.Title := 'proga';

    frmpswrd:=TPasswordDlg.Create(nil);
        try
        repeat
       frmpswrd.ShowModal;
       if (frmpswrd.ModalResult = 1)  then
       begin
  frmpswrd.query.close;
  frmpswrd.query.sql.text:='select admin, prepod from dop where login = '+quotedstr(frmpswrd.edit_login.text)+' and pass = '+quotedstr(frmpswrd.edit_login.text);
  frmpswrd.query.open;
     end;
       if frmpswrd.query.recordcount=0 then
  begin
       // тут какое то сообщение при введении ошибочного пароля
  end   
else
if frmpswrd.query.recordcount>0 then
begin
   if frmpswrd.query.fieldbyname(admin).asboolean and not query.fieldbyname(prepod).asboolean then 
Application.CreateForm(TForm_admin, Form_admin);//если админ
    if not frmpswrd.query.fieldbyname(admin).asboolean and  frmpswrd.query.fieldbyname(prepod).asboolean 
Application.CreateForm(TForm_prepod, Form_prepod);// если препод
    if  frmpswrd.query.fieldbyname(admin).asboolean and  frmpswrd.query.fieldbyname(prepod).asboolean 
Application.CreateForm(TForm_super_admin_prepod, Form_super_admin_prepod);// если препод и к тому же админ))
    if  not frmpswrd.query.fieldbyname(admin).asboolean and not  frmpswrd.query.fieldbyname(prepod).asboolean 
Application.CreateForm(Form_ktoto_iz_tolpy, Form_ktoto_iz_tolpy);//если не пойми кто
  end; 
 until (frmpswrd.query.recordcount>0) or (frmpswrd.ModalResult <> 1);
       finally
       frmpswrd.Free;
       end;
  Application.Run;
end.
ну вот как то так,

писал уже поздно, и прямо тут, так что от ошибок не застраховано. И это просто примерно как может выглядеть.

Последний раз редактировалось vovk; 13.02.2012 в 20:38.
vovk вне форума Ответить с цитированием
Старый 18.02.2012, 16:17   #3
MoToP4uK
 
Регистрация: 13.02.2012
Сообщений: 3
По умолчанию

procedure TForm1.btn1Click(Sender: TObject);
var s1: string;
begin
datamodule3.qry1.close;
datamodule3.qry1.sql.clear;
s1:='select * from dop where login='+QuotedStr(edt1.text)+'and pass='+QuotedStr(Edt2.text);
datamodule3.qry1.sql.add(s1);
datamodule3.qry1.active:=true;
if not datamodule3.qry1.isEmpty then
begin
form3.show;
Form1.Visible:= false;
edt1.Clear;
edt2.Clear;
end

else
ShowMessage('Неверное введение')
end;
Не получается сюда прикрепить проверку логических полей. При admin = true открытие 3 формы, при prepod = true форма4 если оба лож то форма5.
MoToP4uK вне форума Ответить с цитированием
Старый 18.02.2012, 17:33   #4
MoToP4uK
 
Регистрация: 13.02.2012
Сообщений: 3
По умолчанию

все огромное спасибо разобрался!
MoToP4uK вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Команды логических операций, сдвигов, выделение битовых полей tvincen Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 16.01.2012 04:13
Парсер логических выражений Hemul Общие вопросы C/C++ 1 18.10.2011 21:45
При удалении записей значения полей с type:=Autoincrement (т.е+) в оставшихся полей не изменяются kenta БД в Delphi 2 29.10.2009 08:28
Объеденение полей запроса в для отображения нескольких полей в одном списке mrCreator Microsoft Office Access 3 08.08.2009 00:53
Использование логических функций Клубничка Microsoft Office Excel 52 15.01.2009 15:01