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

БД: Password dialog

12.07.2011, 21:42. Показов 1948. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru