Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.05.2017, 17:20
yurakulikovs yurakulikovs вне форума
Прохожий
 
Регистрация: 24.05.2017
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Проверка на "Вход"

Добрый день, помогите как вернее написать код.. Если же пользователь не верно ввел логин/пароль, то выдает cсообщение "Ошибка!" она повторяется несколько раз. Связано с базой данных Access, помогите пожалуйста
Т.к. я уже ломаю голову... Я новичок... Хоть где то дописать код или отредактировать...
P.S. Когда ввожу правильный логин и пароль, и она сразу выдает сообщение "Ошибка!" (и опять снова повторяется несколько раз) и открывается новая форма. Заранее буду благодарен!

Код:
procedure TForm16.BitBtn1Click(Sender: TObject);
var LogPass: array of string;
    i, h, Counts:integer;
    ResultLoginPassword:string;
begin
   if (Length(Trim(Edit1.Text)) = 0) or (Length(Trim(Edit2.Text)) = 0) then
  begin
      MessageBox(Handle, 'Обязательные поля не заполнены!', 'Ошибка!', mb_OK + mb_ICONWARNING);
  end;
  SetLength(LogPass, 255);
  ADODataSet1.Active:=true;
  ADODataSet1.First;
  for i:=0 to ADODataSet1.RecordCount - 1 do  //Обработка данных Логина и Пароля пользователя
    begin
      LogPass[i]:=ADODataSet1.FieldValues['UserName']+' '+ADODataSet1.FieldValues['UserPass'];
      ADODataSet1.Next;
      inc (Counts);
    end;
  ResultLoginPassword:=Trim(Edit1.Text)+' '+Trim(Edit2.Text);
  for h:=0 to Counts do  //Цикл проверки данных на истину
    begin
      if ResultLoginPassword = LogPass[h] then //Номер порядковый в базы данных Access, 
                                         //который пользователь вводит Логин и Пароль
        begin
          UserIndex:=h;
          Form18.Show;
          Form16.Close;
        end
        else
        begin
          MessageBox (handle, 'Неверный логин или пароль!', 'Ошибка!', mb_ok + MB_ICONERROR); //повторяется несколько раз
        end;
    end;
end;

Последний раз редактировалось yurakulikovs, 24.05.2017 в 17:23.
Ответить с цитированием
  #2  
Старый 24.05.2017, 20:40
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Переделал твой код.
Код:
var found: boolean;
...
UserIndex := -1;
found := false;
ResultLoginPassword:=Trim(Edit1.Text)+' '+Trim(Edit2.Text);
for i:=0 to ADODataSet1.RecordCount - 1 do
begin
    if ResultLoginPassword = ADODataSet1.FieldValues['UserName']+' '+ADODataSet1.FieldValues['UserPass'] then
    begin
        UserIndex := i; // понятия не имею, что это и зачем оно тебе нужно, но пусть будет
        found := true;
        break;
    end;
    ADODataSet1.Next;
end;
if found then begin
    Form18.Show;
    Form16.Close;
end else begin
    MessageBox (handle, 'Неверный логин или пароль!', 'Ошибка!', mb_ok + MB_ICONERROR);
end;
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 24.05.2017 в 20:44.
Ответить с цитированием
  #3  
Старый 24.05.2017, 22:12
yurakulikovs yurakulikovs вне форума
Прохожий
 
Регистрация: 24.05.2017
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Bargest
Переделал твой код.
Код:
var found: boolean;
...
UserIndex := -1;
found := false;
ResultLoginPassword:=Trim(Edit1.Text)+' '+Trim(Edit2.Text);
for i:=0 to ADODataSet1.RecordCount - 1 do
begin
    if ResultLoginPassword = ADODataSet1.FieldValues['UserName']+' '+ADODataSet1.FieldValues['UserPass'] then
    begin
        UserIndex := i; // понятия не имею, что это и зачем оно тебе нужно, но пусть будет
        found := true;
        break;
    end;
    ADODataSet1.Next;
end;
if found then begin
    Form18.Show;
    Form16.Close;
end else begin
    MessageBox (handle, 'Неверный логин или пароль!', 'Ошибка!', mb_ok + MB_ICONERROR);
end;

А сработает на другой форме, если из отредактированной коды, на новом форме 18: Данные о пользователя, как его имя, фамилия и т.д.. При авторизации и ввод под логин/пароль, и на другой форме должен быть конкретный пользователь (имя, фамилия и т.д.), на форме есть компонент DBText. Я добавил в другой форме ADOQuery (его запрос: SELECT UserNamePersonal, UserFamilyPersonal, UserGroupPersonal FROM Users WHERE IDUSer = :UserIndex) и DataSource. И в том числе тоже настроил DBText (указал в DataField, и связал с DataSource) и указал необходимые как в запросе... И сработает из отредактированной кода (пользователь вводит логин и пароль), а на новом форме уже конкретный пользователь под логина и пароля (в форме 18), его код:

Код:
procedure TForm18.FormShow(Sender: TObject);
begin
  ADOQuery1.Active:=false;
  ADOQuery1.Parameters.ParamByName('UserIndex').Value:=Unit16.UserIndex+1;
  ADOQuery1.ExecSQL;
  ADOQuery1.Active:=true;
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:26.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter