|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Проверка на "Вход"
Добрый день, помогите как вернее написать код.. Если же пользователь не верно ввел логин/пароль, то выдает 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
|
||||
|
||||
Переделал твой код.
Код:
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
|
|||
|
|||
Цитата:
А сработает на другой форме, если из отредактированной коды, на новом форме 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; |