![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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;Последний раз редактировалось 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; |