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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2013, 01:56   #1
reihtmonbern
Форумчанин
 
Регистрация: 08.01.2011
Сообщений: 102
По умолчанию Цикл на сравнение значения из БД

Здравствуйте есть задача реализовать вход в бд Access по паролю

Вот код
Код:
procedure TForm1.Button1Click(Sender: TObject);
var s, v,d:string;
begin
s:=Edit1.Text;
 v:=Edit2.Text;
 d:=Edit3.Text;
 while not ADOQuery1.Eof do begin

    if ADOQuery1.FieldValues['N'] = Edit1.Text then Form2.Show;
    if ADOQuery1.FieldValues['N'] <> Edit1.Text then Showmessage('Ошибка');
    ADOQuery1.Next;
  end;
end;
он работает корректно если я ввожу неправильный пароль выходит сообщение об ошибке но второй раз программа не работает вторую попытку нельзя сделать , а когда ввожу правильное значение то тогда открывается вторая форма но и сообщение об ошибке тоже .
Подскажите пожалуйста как можно этот код грамотно доработать
ниже во вложении исходник ...
Вложения
Тип файла: rar Новая папка (3).rar (126.6 Кб, 12 просмотров)
reihtmonbern вне форума Ответить с цитированием
Старый 29.12.2013, 03:17   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

при нажатии этой кнопки уже рассчитано что запрос в адоквери уже запущен, и перебирает результаты с начала
в то время как при повторном нажатии на кнопку будет уже весь результат просмотрен и фокус на пустом месте (пояледняя просмотрена)
т.е. при повторном нажатии нужно либо делать ADOQuery1.First; либо делать ADOQuery1.Close; ADOQuery1.Open;

в идеале сразу можно составить SQL запрос который будет искать пароль в бд... в случае который ты привел... будет работать некорректно
если сперва попадется верный - все норм, форму закроешь, он дальше будет гонять цикл, аналогично и с Ошибкой... за вход выбить может пару раз...
пишу код не только за печеньки

Последний раз редактировалось VIK_aka_TOR; 29.12.2013 в 03:40.
VIK_aka_TOR вне форума Ответить с цитированием
Старый 29.12.2013, 10:49   #3
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

логику этого кода вообще трудно понять, зачем нажимать да еще и несколько раз?
eval вне форума Ответить с цитированием
Старый 30.12.2013, 19:15   #4
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию

Цитата:
Сообщение от reihtmonbern Посмотреть сообщение
Здравствуйте есть задача реализовать вход в бд Access по паролю

Вот код
Код:
procedure TForm1.Button1Click(Sender: TObject);
var s, v,d:string;
begin
s:=Edit1.Text;
 v:=Edit2.Text;
 d:=Edit3.Text;
 while not ADOQuery1.Eof do begin

    if ADOQuery1.FieldValues['N'] = Edit1.Text then Form2.Show;
    if ADOQuery1.FieldValues['N'] <> Edit1.Text then Showmessage('Ошибка');
    ADOQuery1.Next;
  end;
end;
он работает корректно если я ввожу неправильный пароль выходит сообщение об ошибке но второй раз программа не работает вторую попытку нельзя сделать , а когда ввожу правильное значение то тогда открывается вторая форма но и сообщение об ошибке тоже .
Подскажите пожалуйста как можно этот код грамотно доработать
ниже во вложении исходник ...
Вот корявый запросик но думаю должен работать

Код:
 try
    with F_Main.ADOQuery1 do
    begin
      Active:=False;
      SQL.Clear;                     //BD ИМЯ ТАБЛИЦЫ,  N ИМЯ ПОЛЯ                                                                                                                                                                     
      SQL.Add('SELECT * FROM BD=:pPASS WHERE N=:pid');
      Parameters.ParamByName('pPASS').Value:=EDIT1.TEXT;
       ExecSQL;
       if(F_Main.ADOQuery1.RecordCount>0) showmessage('pass true') else Showmessage('Pass false');
 except
    on e:Exception do
   end;
Konstantin_ua вне форума Ответить с цитированием
Старый 30.12.2013, 21:23   #5
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

В коде выше ExecSQL не будет работать. Это же селективный запрос!
Вместо sql-запроса можно использовать locate() или lookup().
Но весь парадокс заключается в том, что для проверки нужно УЖЕ(!!!) быть подключенным к БД. Разграничение прав пользователей делается совсем другими способами.
Я уже молчу о том, что любая аксесовская база вскрывается за 5 секунд.
_SERGEYX_ вне форума Ответить с цитированием
Старый 31.12.2013, 00:13   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Разграничение прав пользователей делается совсем другими способами.
и тем и этим, смотря что делать
eval вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение 2х открытых файлов и перенос значения maroskaaa Microsoft Office Excel 6 12.04.2012 13:07
Сравнение значения char.C++ jasul Помощь студентам 4 28.10.2011 13:25
сравнение в БД и перемещение значения ... arthur1 БД в Delphi 2 25.10.2011 22:37
Цикл и Сравнение Apostol13 БД в Delphi 17 07.06.2011 15:05
Сравнение значения Edit с числом ? kta87 Общие вопросы Delphi 5 06.03.2010 22:03