Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
 Аватар для Серега19
4 / 0 / 0
Регистрация: 17.12.2010
Сообщений: 38

БД: Password dialog

12.07.2011, 21:42. Показов 1982. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые программисты! Обращаюсь к Вам с просьбой помочь в написании программы. Пишу как бы Пассворд диалог вручную, логины и пассы находяться в базе даных, которая написана на MS Access 2003. В базе данных есть колонки: "Логин", "Пароль" и еще колонка "Права", в которой указываются и редактируются права пользователя (в дальнейшем будет использоваться для выбора показа формы1 или формы2). И возникла проблема в том, что программа видит только одну запись с базы данных, а остальные не видит. Помогите, пожалуйста, разобраться с проблемой.
Наперед, спасибо за помощь!
(Edit1 отвечает за логин, а Edit2 за пароль)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   ADOQuery1->Close();
   ADOQuery1->SQL->Clear();
   ADOQuery1->SQL->Text = "SELECT  Логин, Пароль, Права FROM Вход";
   ADOQuery1->Open();
  while(!ADOQuery1->Eof)
 {
   if (Edit1->Text == ADOQuery1->FieldByName("Логин")->AsString &&
       Edit2->Text == ADOQuery1->FieldByName("Пароль")->AsString &&
       ADOQuery1->FieldByName("Права")->AsString == "Администратор")
       {
        MessageBox(NULL, ("Вы вошли в систему как администратор"),
        ("Вход в систему"), MB_OK); break;
       }
   else
   {
     MessageBox(NULL, ("Неправильный логин или пароль!"),
     ("Вход в систему"), MB_OK); break;
   }
 
   if (Edit1->Text == ADOQuery1->FieldByName("Логин")->AsString &&
       Edit2->Text == ADOQuery1->FieldByName("Пароль")->AsString &&
       ADOQuery1->FieldByName("Права")->AsString == "Пользователь")
   {
     MessageBox(NULL, ("Вы вошли в систему как пользователь"),
     ("Вход в систему"), MB_OK); break;
   }
  else
   {
     MessageBox(NULL, ("Неправильный логин или пароль!"),
     ("Вход в систему"), MB_OK); break;
   }
 }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.07.2011, 21:42
Ответы с готовыми решениями:

Добавление Password Dialog к приложению
Код на кнопке ОК формы Password Dialog if(Password->Text=="1234") { Form1->Visible=true; PasswordDlg->Close(); } else ...

Password dialog and Activity
Есть приложение, которое хотелось бы защитить. При первом запуске необходимо предоставить пользователю возможность задать пароль. (поле...

Как в password dialog сделать 4 и более разных паролей
Нашел для двух,не пойму как сделать с 4 разными паролями const pass1='123'; masterpass='456'; begin if Password.Text =...

9
 Аватар для Lemesh
3 / 3 / 0
Регистрация: 28.06.2011
Сообщений: 8
13.07.2011, 12:05
нет строки перехода к следующей записи в БД

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
void __fastcall TForm1::Button1Click(TObject *Sender) {
    ADOQuery1->Close();
    ADOQuery1->SQL->Clear();
    ADOQuery1->SQL->Text = "SELECT  Логин, Пароль, Права FROM Вход";
    ADOQuery1->Open();
    while (!ADOQuery1->Eof) {
        if (Edit1->Text == ADOQuery1->FieldByName("Логин")->AsString && Edit2->Text == ADOQuery1->FieldByName("Пароль")
            ->AsString && ADOQuery1->FieldByName("Права")->AsString == "Администратор") {
            MessageBox(NULL, ("Вы вошли в систему как администратор"), ("Вход в систему"), MB_OK);
            break;
        }
        else {
            MessageBox(NULL, ("Неправильный логин или пароль!"), ("Вход в систему"), MB_OK);
            break;
        }
 
        if (Edit1->Text == ADOQuery1->FieldByName("Логин")->AsString && Edit2->Text == ADOQuery1->FieldByName("Пароль")
            ->AsString && ADOQuery1->FieldByName("Права")->AsString == "Пользователь") {
            MessageBox(NULL, ("Вы вошли в систему как пользователь"), ("Вход в систему"), MB_OK);
            break;
        }
        else {
            MessageBox(NULL, ("Неправильный логин или пароль!"), ("Вход в систему"), MB_OK);
            break;
        }
    ADOQuery1->Next();
    }
}
0
 Аватар для Серега19
4 / 0 / 0
Регистрация: 17.12.2010
Сообщений: 38
15.07.2011, 03:45  [ТС]
Немного переделал код. Вот как он теперь выглядит:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   ADOQuery1->Close();
   ADOQuery1->SQL->Clear();
   ADOQuery1->SQL->Text = "SELECT  Логин, Пароль, Права FROM Вход";
   ADOQuery1->Open();
   ADOQuery1->First();
for (int i = 0; i < ADOQuery1->RecordCount; i++)
{
   if (Edit1->Text == ADOQuery1->FieldByName("Логин")->AsString &&
       Edit2->Text == ADOQuery1->FieldByName("Пароль")->AsString &&
       ADOQuery1->FieldByName("Права")->AsInteger == 0)
       {
        MessageBox(NULL, ("Вы вошли в систему как администратор"),
        ("Вход в систему"), MB_OK); break;
       }
 
   if (Edit1->Text == ADOQuery1->FieldByName("Логин")->AsString &&
       Edit2->Text == ADOQuery1->FieldByName("Пароль")->AsString &&
       ADOQuery1->FieldByName("Права")->AsInteger == 1)
       {
        MessageBox(NULL, ("Вы вошли в систему как пользователь"),
        ("Вход в систему"), MB_OK);  break;
       }
 
   if (Edit1->Text != ADOQuery1->FieldByName("Логин")->AsString &&
       Edit2->Text != ADOQuery1->FieldByName("Пароль")->AsString)
       {
       ADOQuery1->Next();
       }
  /* if (<условие>)
       {
        MessageBox(NULL, ("Неверный логин или пароль!"),
        ("Вход в систему"), MB_OK); break;
       }            */
 }
}
Но возникла проблема с выводом "MessageBox(NULL, ("Неверный логин или пароль!"), ("Вход в систему"), MB_OK); break;". Мне надо написать условие, которое будет гласить о том, что если поиск закончен по всем записям и подходящего не нашлось, то вывести меседж "Неверный логин или пароль!".
Вариант условия типа
C++
1
2
Edit1->Text != ADOQuery1->FieldByName("Логин")->AsString &&
Edit2->Text != ADOQuery1->FieldByName("Пароль")->AsString
не предлагайте - работает не правильно (
Помогите, пожалуйста
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
15.07.2011, 09:09
Цитата Сообщение от Серега19 Посмотреть сообщение
Мне надо написать условие, которое будет гласить о том, что если поиск закончен по всем записям и подходящего не нашлось, то вывести меседж "Неверный логин или пароль!".
Заведи булевую переменную и по ней выводи свой мессадж
1
 Аватар для Серега19
4 / 0 / 0
Регистрация: 17.12.2010
Сообщений: 38
15.07.2011, 13:56  [ТС]
Я читал во многих литературах и интернете, что есть какое-то свойство, в котором храняться результаты запросов или результаты поисков. У одних пишут, что это ADOQuery1->DataSet, у других - ADOQuery1->RecordCount, у третьих - ADOQuery1->DataSetField, но ничего не работает. Или может я не правильно использовал?... Может кто-то знает потому, что я в булевых переменных и функциях не очень разбираюсь (
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
15.07.2011, 14:18
Пробуй так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   bool df = false;
   ADOQuery1->Close();
   ADOQuery1->SQL->Clear();
   ADOQuery1->SQL->Text = "SELECT  Логин, Пароль, Права FROM Вход";
   ADOQuery1->Open();
   ADOQuery1->First();
for (int i = 0; i < ADOQuery1->RecordCount; i++)
{
   if (Edit1->Text == ADOQuery1->FieldByName("Логин")->AsString &&
           Edit2->Text == ADOQuery1->FieldByName("Пароль")->AsString &&
           ADOQuery1->FieldByName("Права")->AsInteger == 0)
           {
                MessageBox(NULL, ("Вы вошли в систему как администратор"),
                ("Вход в систему"), MB_OK); 
                 df = false; 
                 break;
           }
 
   if (Edit1->Text == ADOQuery1->FieldByName("Логин")->AsString &&
       Edit2->Text == ADOQuery1->FieldByName("Пароль")->AsString &&
       ADOQuery1->FieldByName("Права")->AsInteger == 1)
           {
                MessageBox(NULL, ("Вы вошли в систему как пользователь"),
                ("Вход в систему"), MB_OK);  
                df = false;                 
                break;
           }
        
           df = true;
           ADOQuery1->Next();
           }
        
    if (df)
           {
                MessageBox(NULL, ("Неверный логин или пароль!"),
                ("Вход в систему"), MB_OK); break;
           }
}
1
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
15.07.2011, 14:23
Во-первых, авторизация (логин) выполняется с помошью простого запроса, возвращающего запись (успешная авторизация) либо не возвращающая (отлуп) (для SQL серверов вообще иначе все)
Во-вторых, если нужно сохранить параметры логина, то это легко делается через TIniFile или реестр.
В-третьих, материала по сабжу просто горы в инете, достаточно поискать 10 минут. Всяко быстрее, чем писать галиматью вроде сабжа
1
 Аватар для Серега19
4 / 0 / 0
Регистрация: 17.12.2010
Сообщений: 38
15.07.2011, 14:29  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
Пробуй так?
Не работает, а именно тем, что теперь видит только одну запись администратора из двух, а пользователей ни одного не видит из трьох.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
15.07.2011, 14:31
Тогда поиграйся с булевыми переменными по переставляй их местами и посмотри как будет идти код
1
 Аватар для Серега19
4 / 0 / 0
Регистрация: 17.12.2010
Сообщений: 38
15.07.2011, 14:40  [ТС]
Решил проблему по-другому и мое нужное условие выглядит так
C++
1
2
3
4
5
if (ADOQuery1->Eof)
    {
     MessageBox(NULL, ("Неверный логин или пароль!"),
     ("Вход в систему"), MB_OK); break;
    }
Помогло и отлично работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.07.2011, 14:40
Помогаю со студенческими работами здесь

Поясните пожайлуста механизм работы - PASSWORD=$PASSWORD$BUFF - в цикле
Мне непонятен механизм работы вот такого написания переменной. PASSWORD=$PASSWORD$BUFF # PASSWORD=$BUFF$PASSWORD Как это...

Password
Что я неправильно сделал? Работаю по книге &quot;Гибкая разработка веб-приложений на Rails&quot;. Нажимаю создать студента -&gt; Пишу имя,...

Password
Одна из программ по взлому вайфая выдала пароль в следующих формах Master Key: E2 19 4E DB 91 76 82 84 9C EB 72 98 EC 6E BF 96 31...

Password LineEdit
Здравствуйте, мне надо сделать окно с паролем, подскажите, если знаете - есть ли у lineEdit свойство или инструмент чтобы отображать...

Password с MD5
Подскажите, как записывать пороли с формы регистрации сразу зашифрованные, а потом читать когда входишь в &quot;учетную запись&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru