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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2012, 03:28   #1
Olga89
Пользователь
 
Регистрация: 22.12.2012
Сообщений: 10
По умолчанию Cоздание авторизации пользователя

Привет,может,кто-нибудь сталкивался с данной ситуацией...Суть в том,что нужно создать форму авторизации пользователя(Form 16).База данных хранится в Access,подключена к Delphi,в данной бд существует таблица Avt(авторизация) с логином и паролем(Login u Password).На форме есть два поля для ввода логина и пароля (Edit1 u Edit2),таблица,подключённая к бд(Avt) и кнопка,на которую прописан программный код:
Код:
procedure TForm16.Button1Click(Sender: TObject);
begin
if ((Form16.Edit1.Text = Form16.Avt.FieldByName.AsString ('Login')) and
(Form16.Edit2.Text = Form16.Avt.FieldByName.AsString ('Password')) then begin
ShowMessage('Вход успешно выполнен');
Form16.Visible := False;
 Form1.Visible := True;
end else begin
ShowMessage('Неверный логин или пароль.Повторите ввод');
Form16.Edit1.Text := '';
Form16.Edit2.Text := '';
end;
end;
так вот Делфюша ругается на строку if ((Form16.Edit1.Text = Form16.Avt.FieldByName.AsString ('Login')) после слова AsString ему что-то не нравится....Помогите решить эту загвоздку,пожалуйста!

Последний раз редактировалось Stilet; 23.12.2012 в 11:43.
Olga89 вне форума Ответить с цитированием
Старый 22.12.2012, 13:02   #2
MarazmDed
Пользователь
 
Регистрация: 19.12.2012
Сообщений: 29
По умолчанию

Что-то как-то все принципиально не так...
1) За название Form16 - надо расстреливать без суда и следствия.
2) Судя по коду было сделано непонятно что. Логин и пароль нужно искать в базе, а не сравнивать с текущей записью. Т.е. нужно выполнить запрос вроде select * from avt where login = :login and password = assword.
3) Ругается, потому что правильно будет Form16.Avt.FieldByName('Login').AsS tring

Последний раз редактировалось Stilet; 23.12.2012 в 11:43.
MarazmDed вне форума Ответить с цитированием
Старый 22.12.2012, 22:14   #3
Olga89
Пользователь
 
Регистрация: 22.12.2012
Сообщений: 10
По умолчанию

1)А что плохого в названии Form16?))))У меня 20 форм,мне так удобнее понимать,где и что находится)
2)В поле эдит вводят логин и пароль,эти введённые значения сравнивают с записями в таблице,которая находится в бд!а где прописывать такой запрос??зачем он нужен вообще?
3)Попозже проделаю данную манипуляцию,спасибо!И отпишусь,а то я не с компьютера.
Olga89 вне форума Ответить с цитированием
Старый 22.12.2012, 22:54   #4
MarazmDed
Пользователь
 
Регистрация: 19.12.2012
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Olga89 Посмотреть сообщение
1)А что плохого в названии Form16?))))У меня 20 форм,мне так удобнее понимать,где и что находится)
Это без комментариев. Без суда и следствия Названия должны быть информативными. Вы пожалейте программистов, которые после вас будут сопровождать код. Если же это лабораторка - то тем более это хороший повод учиться красивому стилю программирования. Одно скажу точно: если такие названия обнаружатся в корпоративном проекте, то автор такого хозяйства быстро начнет искать другую работу.

Цитата:
Сообщение от Olga89 Посмотреть сообщение
2)В поле эдит вводят логин и пароль,эти введённые значения сравнивают с записями в таблице,которая находится в бд!а где прописывать такой запрос??зачем он нужен вообще?
Я то понимаю, что вы хотите сделать и как. Но то что написали вы - это сравнение с ТЕКУЩЕЙ записью в БД, а вам нужно сравнить с КАЖДОЙ записью в БД. Запрос вы прописываете в компоненте *Query (AdoQuery, ZeosQuery и т.д.). Если не знаете, что это такое и с чем едят - сперва почитайте мат.часть. Это все - основы.

Цитата:
Сообщение от Olga89 Посмотреть сообщение
3)Попозже проделаю данную манипуляцию,спасибо!И отпишусь,а то я не с компьютера.
Не поможет Код-то откомпилируется, но работать не будет, пока п.2 не переделаете.
MarazmDed вне форума Ответить с цитированием
Старый 23.12.2012, 03:17   #5
Olga89
Пользователь
 
Регистрация: 22.12.2012
Сообщений: 10
По умолчанию

учту все замечания))
не получается всё равно,я прописала запрос в adoquery//Он ругается на ту же строку
Изображения
Тип файла: jpg ч ч.jpg (42.2 Кб, 206 просмотров)
Olga89 вне форума Ответить с цитированием
Старый 23.12.2012, 11:44   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Он ругается на ту же строку
Текст ругательства дословно в студию.
Так же в студию переделанный код.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.12.2012, 12:06   #7
MarazmDed
Пользователь
 
Регистрация: 19.12.2012
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Olga89 Посмотреть сообщение
учту все замечания))
не получается всё равно,я прописала запрос в adoquery//Он ругается на ту же строку
Подозреваю, что вы не заполнили параметры login и password перед выполнением запроса. К тому же мысль запроса - проверить найдутся такие записи или нет. Т.е. в найденном датасете есть записи - авторизация успешна, нет записей - не успешна. ТАк что точно таже строка просто должна исчезнуть. Чтобы вы написали правильный код сперва нужно поизучать 1) основы программирования 2) туториал по программированию БД в Delphi.
MarazmDed вне форума Ответить с цитированием
Старый 23.12.2012, 20:55   #8
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Olga89, по логике при использовании ADOQuery код должен иметь прирно такой вид:
Код:
procedure TForm16.Button1Click(Sender: TObject);
begin
  ADOQuery.Close;
  ADOQuery.SQL.Text:='SELECT * FROM table_users WHERE login = :p_login AND password = :p_passw';
  if (Trim(Form16.Edit1.Text <> '') and (Trim(Form16.Edit2.Text) <> '')
  then 
  begin
    ADOQuery.Parameters.ParamByName('p_login').Value := Form16.Edit1.Text;
    ADOQuery.Parameters.ParamByName('p_passw').Value := Form16.Edit2.Text;
    try
      ADOQuery.Open;
    Except
      ShowMessage(Не удалось открыть таблицу пользователей);
      Exit;
    end;
    if ADOQuery.RecordCount > 0 
    then
    begin
      ShowMessage('Вход успешно выполнен');
      Form16.Visible := False;
      Form1.Visible := True;
    end 
    else 
    begin
      ShowMessage('Неверный логин или пароль.Повторите ввод');
      Form16.Edit1.Text := '';
      Form16.Edit2.Text := '';
    end;
  end
  else
    ShowMessage(Пустые поля логн\пароль не допускаются);
end;
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 23.12.2012, 22:11   #9
Olga89
Пользователь
 
Регистрация: 22.12.2012
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Текст ругательства дословно в студию.
Так же в студию переделанный код.
вот, во вложенном файле ошибка и код((

Цитата:
Сообщение от MarazmDed Посмотреть сообщение
Подозреваю, что вы не заполнили параметры login и password перед выполнением запроса. К тому же мысль запроса - проверить найдутся такие записи или нет. Т.е. в найденном датасете есть записи - авторизация успешна, нет записей - не успешна. ТАк что точно таже строка просто должна исчезнуть. Чтобы вы написали правильный код сперва нужно поизучать 1) основы программирования 2) туториал по программированию БД в Delphi.
всё было заполнено,датасет я тоже подключила,не работает авторизация
Изображения
Тип файла: jpg ошибка.jpg (38.8 Кб, 194 просмотров)

Последний раз редактировалось artemavd; 24.12.2012 в 14:58.
Olga89 вне форума Ответить с цитированием
Старый 23.12.2012, 22:53   #10
Olga89
Пользователь
 
Регистрация: 22.12.2012
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Yurk@ Посмотреть сообщение
Olga89, по логике при использовании ADOQuery код должен иметь прирно такой вид:
Код:
procedure TForm16.Button1Click(Sender: TObject);
begin
  ADOQuery.Close;
  ADOQuery.SQL.Text:='SELECT * FROM table_users WHERE login = :p_login AND password = :p_passw';
  if (Trim(Form16.Edit1.Text <> '') and (Trim(Form16.Edit2.Text) <> '')
  then 
  begin
    ADOQuery.Parameters.ParamByName('p_login').Value := Form16.Edit1.Text;
    ADOQuery.Parameters.ParamByName('p_passw').Value := Form16.Edit2.Text;
    try
      ADOQuery.Open;
    Except
      ShowMessage(Не удалось открыть таблицу пользователей);
      Exit;
    end;
    if ADOQuery.RecordCount > 0 
    then
    begin
      ShowMessage('Вход успешно выполнен');
      Form16.Visible := False;
      Form1.Visible := True;
    end 
    else 
    begin
      ShowMessage('Неверный логин или пароль.Повторите ввод');
      Form16.Edit1.Text := '';
      Form16.Edit2.Text := '';
    end;
  end
  else
    ShowMessage(Пустые поля логн\пароль не допускаются);
end;
Спасибо))ваш код практически приблизил меня к цели,я его видоизменила,потому,что он ругался с первой строки))(у меня все адоквери и датасорс находятся на форме модуля).Теперь он заходит в любом случаедаже если вводишь неправильный пароль и неверного пользователя,сообщение с неверным паролем он выводит,когда не заполняешь(оставляешь пустым) поле логин или пароль
Код:
begin
DM.Avt.Close;
DM.Avt.SQL.Text:='SELECT * FROM Avt WHERE login = :Login AND password = :Password';
  if (Form16.Edit1.Text<> '') and (Form16.Edit2.Text <> '')
  then
  begin
     DM.Avt.Parameters.ParamByName('Login').Value := Form16.Edit1.Text;
    DM.Avt.Parameters.ParamByName('Password').Value := Form16.Edit2.Text;
     ShowMessage('Âõîä óñïåøíî âûïîëíåí');
      Form16.Visible := False;
      Form1.Visible := True;
      Form16.Edit1.Clear;
      Form16.Edit2.Clear;


    end
    else
    begin
      ShowMessage('Íåâåðíûé ëîãèí èëè ïàðîëü.Ïîâòîðèòå ââîä');
      Form16.Edit1.Text := '';
      Form16.Edit2.Text := '';
    end;
  end;

Последний раз редактировалось artemavd; 25.12.2012 в 11:35.
Olga89 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cоздание сервера. ISV-777 Общие вопросы по Java, Java SE, Kotlin 2 12.06.2012 21:58
cоздание бд на erwin Chernov_vova Общие вопросы по программированию, компьютерный форум 0 22.05.2012 10:58
Надо найти ошибку в авторизации пользователя moloko01 PHP 8 17.02.2011 14:19
Cоздание программы gegjr Помощь студентам 4 07.03.2010 22:24
Созранение авторизации пользователя _PROGRAMM_ PHP 5 12.01.2010 10:22