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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2012, 14:19   #1
StudUL
Пользователь
 
Регистрация: 21.12.2008
Сообщений: 40
По умолчанию

Здравствуйте, подскажите как можно сделать при запуске программы ввод пользователя и пароля. Есть отдельная табличка в Access там поля: №, имя пользователя, пароль.
У меня СУБД в Access, а сама программа в Builder.
Если можно, то подробно по шагам расписать, т.к. я новичок в этом деле.
Могу базу разместить, если кто готов помочь.

Я поместила на форму Edit1 и Edit2, кнопку, и компонент Ttable и Data Source. Теперь пробую соединить это всё.

Последний раз редактировалось ACE Valery; 05.06.2012 в 20:39.
StudUL вне форума Ответить с цитированием
Старый 06.06.2012, 12:37   #2
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

Раз у Вас СУБД Access, то скорее всего будете использовать ADOConnection. Как вытащить из таблицы имя пользователя и пароль, надеюсь, знаете. А чтобы при запуске программы появлялся запрос, просто добавьте библиотеку
Код:
#include <Dblogdlg.hpp>
и на событие FormShow напишите такой текст:
Код:
   /*  #include <Dblogdlg.hpp>  */
    AnsiString una, pwd  ;
    if (LoginDialog( "Моя База",una,pwd))
   {
       if (una=="Администратор") { ;  ;  }
       else ShowMessage("Введенный пароль: "+pwd);
   }
    else Close();
Это только пример, конечно. Строки una и pwd придется в цикле сравнивать с теми, что в базе.
nick42 вне форума Ответить с цитированием
Старый 06.06.2012, 13:04   #3
StudUL
Пользователь
 
Регистрация: 21.12.2008
Сообщений: 40
По умолчанию

AdoConnection подключила. Вот такой код вставила:
Код:
AnsiString al=Edit1->Text;
AnsiString bl;
AnsiString ap=Edit2->Text;
AnsiString bp;
ADOTable1->First();
  for (int i=0;i<ADOTable1->RecordCount;i++)
  {
   bl=ADOTable1->FieldByName("TN")->AsString;
    bp=ADOTable1->FieldByName("P")->AsString;
   if (al != bl)
   {
ShowMessage("Логин не верен!");
Edit1->Clear();
 Edit2->Clear();
return;
   }
 if  (ap != bp)
 {
ShowMessage("Пароль не верен!");
Edit2->Clear();
return;
 }
     else
     {
Form1->ShowModal();
     }
  }
Только при запуске работает первый пользователь и пароль. Если какой-нибудь другой ввожу, то нет, не открывает.
StudUL вне форума Ответить с цитированием
Старый 06.06.2012, 13:18   #4
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

Надо в цикле добавить ADOTable1->Next(); для перебора, и сообщения и несовпадении выдавать уже вне цикла, по состоянию флажка (true-false) совпадения.
nick42 вне форума Ответить с цитированием
Старый 06.06.2012, 13:24   #5
StudUL
Пользователь
 
Регистрация: 21.12.2008
Сообщений: 40
По умолчанию

Вставила, пишет неверный логин и пароль.
Код:
for (int i=0;i<ADOTable1->RecordCount;i++)
  {
  ADOTable1->Next();
   bl=ADOTable1->FieldByName("TN")->AsString;
    bp=ADOTable1->FieldByName("P")->AsString;
   if (al != bl)
   {
StudUL вне форума Ответить с цитированием
Старый 06.06.2012, 13:30   #6
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

(Вставлять тоже уметь надо...) А неправильно потому что. Вот так приблизительно надо__
Код:
  bool legal=false;
  ADOTable1->First();
  for (int i=0;i<ADOTable1->RecordCount;i++)
  {
   bl=ADOTable1->FieldByName("TN")->AsString;
    bp=ADOTable1->FieldByName("P")->AsString;
     if (al==bl && ap==bp) legal = true;
      ADOTable1->Next();
  }
  if (!legal) ShowMessage("Login or Password incorrect!");
  else { ; ; ; }
nick42 вне форума Ответить с цитированием
Старый 06.06.2012, 13:50   #7
StudUL
Пользователь
 
Регистрация: 21.12.2008
Сообщений: 40
По умолчанию

Что-то ни под каким паролем и пользователем не заходит.
Код:
void __fastcall TForm2::Button1Click(TObject *Sender)
{
AnsiString al=Edit1->Text;
AnsiString bl;
AnsiString ap=Edit2->Text;
AnsiString bp;
ADOTable1->First();
  bool legal=false;
  ADOTable1->First();
  for (int i=0;i<ADOTable1->RecordCount;i++)
  {
   bl=ADOTable1->FieldByName("TN")->AsString;
    bp=ADOTable1->FieldByName("P")->AsString;
     if (al==bl && ap==bp) legal = true;
      ADOTable1->Next();
  }
  if (!legal) ShowMessage("Login or Password incorrect!");
  else { ; ; ; }
Edit1->Clear();
 Edit2->Clear();
return;
   }
StudUL вне форума Ответить с цитированием
Старый 06.06.2012, 14:14   #8
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

Не понял: на любой ввод сообщение Login or Password incorrect! ?
nick42 вне форума Ответить с цитированием
Старый 06.06.2012, 14:43   #9
StudUL
Пользователь
 
Регистрация: 21.12.2008
Сообщений: 40
По умолчанию

Ввожу логин и пароль, имеющиеся в таблице, выводит ошибку.
StudUL вне форума Ответить с цитированием
Старый 06.06.2012, 15:26   #10
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

Попробуйте в сообщение об ошибке вставить слова (логин-пароль) из базы, с которыми сравниваете. И какой версией Билдера работаете? У меня все четко анализирует. Если другая форма нужна только для идентификации при старте, то лучше отказаться от такой структуры и делать все с одной формой, используя LoginDialog.
nick42 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Авторизация пользователя revaldo666 Microsoft Office Access 12 16.12.2012 00:29
Авторизация пользователя в Делфи могилев БД в Delphi 9 12.05.2011 01:15
Авторизация пользователя mar4elo PHP 10 31.03.2011 19:28
Авторизация пользователя (плагин) MCLotos PHP 3 06.01.2011 18:40
авторизация и распознавание пользователя МаМи Microsoft Office Access 3 27.03.2010 21:03