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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2011, 17:05   #1
Fastah
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 39
По умолчанию Доработка кода авторизации

Помогите доработать, не могу разобраться почему не работает должным образом

в общем должно работать так: если в edit1(логин) или edit2(пароль) пусто то ошибка, если поля заполнены, то идёт проверка на совпадение логина, если такой логин есть, то ошибка, если нет то регистрация

Код:
procedure TForm3.Button3Click(Sender: TObject);
begin
if (Length(Edit1.text)=0) or (Length(Edit2.text)=0) then
showmessage('Ошибка: Ввод пустых строк запрещен!');
if (Length(Edit1.text)>0) and (Length(Edit2.text)>0) then
begin
datamodule2.Adotable1.Filtered:=true;
datamodule2.Adotable1.Filter:='[Name] LIKE "%'+Edit1.Text+'%"';
showmessage('Ошибка: Пользователь уже существует!');
datamodule2.Adotable1.Filtered:=false;
end
else
begin
datamodule2.Adotable1.Open;
datamodule2.Adotable1.Insert;
datamodule2.Adotable1.FieldByName('Name').AsString:= Edit1.Text;
datamodule2.Adotable1.FieldByName('Password').AsString:= Edit2.Text;
datamodule2.Adotable1.Post;
datamodule2.Adotable1.Close;
datamodule2.Adotable1.Open;
datamodule2.Adotable1.FindLast;
showmessage('Новый пользователь зарегистрирован');
end;
вместо этого программа производит регистрацию если пуст edit1 или edit2 или пусты оба
так же сообщение Ошибка: Пользователь уже существует! срабатывает только если оба поля заполнены, причём работает не корректно

Последний раз редактировалось Fastah; 21.03.2011 в 17:09.
Fastah вне форума Ответить с цитированием
Старый 21.03.2011, 17:15   #2
skgwazap
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 40
По умолчанию

Если в каком либо из edit-ов пусто, то выполнится первый if, то есть сообщение об ошибке, но после этого процедура не завершится, будет выполнен второй if но по ветке else, так как условие не выполняется.
skgwazap вне форума Ответить с цитированием
Старый 21.03.2011, 17:57   #3
Fastah
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 39
По умолчанию

Цитата:
Сообщение от skgwazap Посмотреть сообщение
Если в каком либо из edit-ов пусто, то выполнится первый if, то есть сообщение об ошибке, но после этого процедура не завершится, будет выполнен второй if но по ветке else, так как условие не выполняется.
Понял спасибо, теперь не могу придумать как сделать корректно
Fastah вне форума Ответить с цитированием
Старый 21.03.2011, 18:57   #4
skgwazap
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 40
По умолчанию

После
Код:
showmessage('Ошибка: Ввод пустых строк запрещен!');
поставить break; (begin end не забыть)
skgwazap вне форума Ответить с цитированием
Старый 22.03.2011, 03:17   #5
Fastah
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 39
По умолчанию

Цитата:
Сообщение от skgwazap Посмотреть сообщение
После
Код:
showmessage('Ошибка: Ввод пустых строк запрещен!');
поставить break; (begin end не забыть)
ругается на break [Pascal Error] Unit3.pas(65): E2097 BREAK or CONTINUE outside of loop - насколько понимаю делфи хочет что бы оператор был в цикле, но у меня то if'ы
Fastah вне форума Ответить с цитированием
Старый 22.03.2011, 03:51   #6
Fastah
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 39
По умолчанию

сделал так
Код:
begin
if (Length(Edit1.text)=0) or (Length(Edit2.text)=0) then
showmessage('Ошибка: Ввод пустых строк запрещен!')
else 
if (Length(Edit1.text)>0) and (Length(Edit2.text)>0) then
begin
datamodule2.Adotable1.Filtered:= false;;
datamodule2.Adotable1.Filter:='[Name] LIKE '+#39+'%'+Edit1.Text+'%'+ #39;
datamodule2.Adotable1.Filtered:= true;
showmessage('Ошибка: Пользователь уже существует!');
end
else
begin
datamodule2.Adotable1.Open;
datamodule2.Adotable1.Insert;
datamodule2.Adotable1.FieldByName('Name').AsString:= Edit1.Text;
datamodule2.Adotable1.FieldByName('Password').AsString:= Edit2.Text;
datamodule2.Adotable1.Post;
datamodule2.Adotable1.Close;
datamodule2.Adotable1.Open;
datamodule2.Adotable1.FindLast;
showmessage('Новый пользователь зарегистрирован');
но теперь не работает поиск, каждый раз если поля не пустые программа говорит на любое имя что оно существует

p.s. понимаю почему не работает, но как сделать рабочую версию не могу придумать

Последний раз редактировалось Fastah; 22.03.2011 в 03:55.
Fastah вне форума Ответить с цитированием
Старый 22.03.2011, 08:25   #7
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

проверки на пустые поля лучше проводить так:
Код:
if (Edit1.text='')or(edit2.text='')then begin
	ShowMessage('Одно или более полей для ввода на заполнены!');
	Exit;
end;
а лолгика...
1-проверка на пустость (лучше ещё добавить проверку на недопустимые символы)
2 - если проверка пройдена - то проверка на существование такого логина, если не пройдена - то мессага и выход
3 - если проверка пройдена то добавление записи...

У Вас же...
Код:
showmessage('Ошибка: Пользователь уже существует!');
вызывается в любом случае, если поля не пустые... Не важно, что Вы фильтруете свою базу, важно то, что Вы не проверяете её после фильтрации! После фильтрации нужно проверить, остались ли поля. Если остались - пользователь существует.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}

Последний раз редактировалось Johnson; 22.03.2011 в 08:28.
Johnson вне форума Ответить с цитированием
Старый 22.03.2011, 11:45   #8
Fastah
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 39
По умолчанию

Johnson
Спасибо за подсказку!
Вот так получилось:
Код:
if (Edit1.text='')or(edit2.text='')then
begin
showmessage('Ошибка: Ввод пустых строк запрещен!');
exit;
end
else
if (Length(Edit1.text)>0) and (Length(Edit2.text)>0) then
begin
if datamodule2.Adotable1.Locate('Name',Edit1.Text,[]) then
begin
ShowMessage('Ошибка: Пользователь уже существует!');
exit;
end
else
datamodule2.Adotable1.Open;
datamodule2.Adotable1.Insert;
datamodule2.Adotable1.FieldByName('Name').AsString:= Edit1.Text;
datamodule2.Adotable1.FieldByName('Password').AsString:= Edit2.Text;
datamodule2.Adotable1.Post;
datamodule2.Adotable1.Close;
datamodule2.Adotable1.Open;
datamodule2.Adotable1.FindLast;
showmessage('Новый пользователь зарегистрирован');

Последний раз редактировалось Fastah; 22.03.2011 в 12:25.
Fastah вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
форма авторизации NZero Общие вопросы .NET 3 25.12.2010 00:15
С++ нужна корректировка\доработка кода. Akmall Помощь студентам 1 19.12.2010 16:34
С++ нужна корректировка\доработка кода. Akmall Помощь студентам 3 10.12.2010 22:51
Создание авторизации Sashka :) Помощь студентам 6 28.04.2010 18:17
Вопрос по авторизации Anatol_rus Работа с сетью в Delphi 2 15.10.2009 16:20