Авторизация пользователя через созданную форму в Delphi

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Toshiba
Сообщения: 11
Зарегистрирован: 29 фев 2008, 14:53

Авторизация пользователя через созданную форму в Delphi

Сообщение Toshiba » 28 мар 2008, 07:16

Всем привет! У меня вопрос следующего содержания:
Хочу подключаться к базе InterBase через свою созданную форму авторизации! При не правильном вводе пользователя сообщается ошибка, о том что спросите своего админа БД о пароле или имени пользователя! Псоле этого приложуха выкидывается! Хочется сделать так чтобы просто выкидывалось свое диалоговое окно о том что введен не правильный пароль или логин! Так каким компонентом пользоваться? пробовал такую штуку
try
base.connected:=true;
except
........
end;
все равно не помогает! Помогите плиз, люди добрые!

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 28 мар 2008, 09:17

все равно не помогает! Помогите плиз, люди добрые!
минимум лет десять на массе дельфевых сайтов есть туча подобных примеров. Плюс, подозреваю, этот вопрос описан в любой книжке по дельфям, в которой описано программирование работы с БД.
Так каким компонентом пользоваться?
хрен его знает. а какими Вы пользуетесь?

Toshiba
Сообщения: 11
Зарегистрирован: 29 фев 2008, 14:53

Сообщение Toshiba » 28 мар 2008, 09:24

Передо мной эта книга лежит...там и описан метод try....excepт
Но никак он не работает ибо на мой взгляд данная ошибка вызывается сервером InterBase....инет на данную тему прорыл как мог..ничего путного не нашел! Может кто и ссылку даст - буду благодарен!

Gera
Сообщения: 53
Зарегистрирован: 12 мар 2008, 17:34

Сообщение Gera » 28 мар 2008, 09:39

как именно не работает?
не переходит в Except блок или все равно появляется стандартное сообщение?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 28 мар 2008, 09:40

Передо мной эта книга лежит...там и описан метод try....excepт
при чем тут try except? надо событие OnLogin переписать. по нему в дельфях есть хелп.

и, последний раз спрашиваю - какой набор компонент используете - ADO, IBX, BDE, dbExpress?

RedAndBlack
Сообщения: 24
Зарегистрирован: 16 авг 2007, 07:18

Сообщение RedAndBlack » 28 мар 2008, 11:45

тоже столкнулся с такой проблемой. использую ibx. покопавшись в исходниках, понял, что для проверки соединения нужно использовать ibapi. ну и прежде чем собственно соединение осуществить, нужно довольно много кода написать. в fbplus есть errorhandler, собстна через него можно что-то сделать. но должно же быть решение проще))

Toshiba
Сообщения: 11
Зарегистрирован: 29 фев 2008, 14:53

Сообщение Toshiba » 28 мар 2008, 11:47

Использую IBX...а try ....except.. все равно выполняет подключение к IB а она в свою очередь выдает ошибку - спрочите логин или пароль у админа...надо просто эту ошибку перехватить или еще что то в этом роде

RedAndBlack
Сообщения: 24
Зарегистрирован: 16 авг 2007, 07:18

Сообщение RedAndBlack » 28 мар 2008, 11:49

вот вот, туда же и залез =)

Toshiba
Сообщения: 11
Зарегистрирован: 29 фев 2008, 14:53

Сообщение Toshiba » 28 мар 2008, 11:56

Вот код:

Код: Выделить всё

  form1.base.Params.Clear;
  form1.base.LoginPrompt:=False;
  form1.base.DatabaseName:='server:e:\path\xxx.ib';
  form1.base.Params.Add('user_name='+Edit1.text);
  form1.base.Params.Add('password='+Edit2.text);
  form1.base.Params.Add('SQLRole=zakaz');
  form1.base.Params.Add('lc_ctype=none');
   k:=1;
  try  
 form1.base.connected:=true; //- {вот эта строка происходит всегда даже если пользователя или пароль указали неверно, в этом случае вываливается ошибка которая просто ставит в даун приложение}
  except  begin
  messagedlg('Не правильный ввод пароля',mtInformation,  [mbYes],0);
  k:=0;
  end;         
end;

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 28 мар 2008, 11:59

Студенты активизировались, что ли?
Какой хендлер? Какой API? Просто пытаешься подключиться, этого достаточно для проверки возможности подключения.
"lc_ctype=none" это из каких соображений?
"Весь интернет перерыл" - враньё. Оба, марш вот эту статью читать.

Toshiba
Сообщения: 11
Зарегистрирован: 29 фев 2008, 14:53

Сообщение Toshiba » 28 мар 2008, 12:02

И что при простом подключении не выдает ошибку если ползователь введен неверно? - проверь! Я уже сутки сижу..статью которую ты дал - уже читал - ничего там про это не написанно - это исключении при конекте! "lc_ctype=none" - это из соображений что связываемся с 1с! а она выгружать из себя может тока в такой кодировки!

RedAndBlack
Сообщения: 24
Зарегистрирован: 16 авг 2007, 07:18

Сообщение RedAndBlack » 28 мар 2008, 12:03

читали тыщу раз статью. просто проблема наверное неправильно выражена.

Код: Выделить всё

  try
    Database.Connected := True;
    Result := True;
  except
    ShowMessage('не законнектились');
    Result := False;
  end;
у меня при эксепшене приложение выдает сначала 'не законнектились', потом интербейзовское сообщение. чот ваще непонятно =\

RedAndBlack
Сообщения: 24
Зарегистрирован: 16 авг 2007, 07:18

Сообщение RedAndBlack » 28 мар 2008, 12:07

вообще хочется чтобы свой logindialog показывался до тех пор, пока не законнектимся или не нажмём 'cancel'.

з.ы. блин, а утром придя на работу хотел покопаться в другом =)

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 28 мар 2008, 12:18

Toshiba писал(а):"lc_ctype=none" - это из соображений что связываемся с 1с! а она выгружать из себя может тока в такой кодировки!
1C вообще не умеет "из себя выгружать" в IB/FB ни в каком виде. Потому эту фразу я не понял.
И наоборот, загружать в IB/FB базу не обязательно в той кодировке, в которой получил данные (если, конечно, не юникод с разными "раскладками" одновременно).
RedAndBlack писал(а):сначала 'не законнектились', потом интербейзовское сообщение
Вероятно, дальше по коду ты что-то пытаешься сделать с этим несостоявшимся соединением.
Что за ошибка-то?

Toshiba
Сообщения: 11
Зарегистрирован: 29 фев 2008, 14:53

Сообщение Toshiba » 28 мар 2008, 12:23

Выгрузку из 1с в IB я уже сделал - так что она может это!
вот ошибка при введении неправилного лоигна котрое выдает IB:
Roject XXX raised exception class EIBInterBaseError with message 'Your user name and password are not defined. Ask your database administrator to set up an InterBase login'

RedAndBlack
Сообщения: 24
Зарегистрирован: 16 авг 2007, 07:18

Сообщение RedAndBlack » 28 мар 2008, 12:55

WildSery писал(а):
RedAndBlack писал(а):сначала 'не законнектились', потом интербейзовское сообщение
Вероятно, дальше по коду ты что-то пытаешься сделать с этим несостоявшимся соединением.
Что за ошибка-то?
далее ничего не делается, датамодуль, где находится база, уничтожается. ошибка та же, что и у Toshiba.

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 28 мар 2008, 13:20

RedAndBlack писал(а):далее ничего не делается, датамодуль, где находится база, уничтожается. ошибка та же, что и у Toshiba.
А зафига он уничтожается, если ты пользователю еще попытку дать хочешь? :)
и что, при успехе тоже без датамодуля работать?
ошибку IB можно вообще-то перехватить и вывести сообщение на великом и могучем.

Код: Выделить всё

 
try
 logfm:=Tlogfm.Create(application);
 logfm.Showmodal;
//и делай ты в этой форме что хочешь, хоть фишечки, хоть рюшечки
//проверяй правильность пароля, выставляй счетчик ошибок, ну что хошь, в общем, пока не скажешь там, что logfm.Modalresult:=......
finally
 logfm.release;
end;
Последний раз редактировалось stix-s 28 мар 2008, 13:28, всего редактировалось 1 раз.

Toshiba
Сообщения: 11
Зарегистрирован: 29 фев 2008, 14:53

Сообщение Toshiba » 28 мар 2008, 13:21

stix-s писал(а):
RedAndBlack писал(а):ошибку IB можно вообще-то перехватить и вывести сообщение на великом и могучем.
КАК???????

RedAndBlack
Сообщения: 24
Зарегистрирован: 16 авг 2007, 07:18

Сообщение RedAndBlack » 28 мар 2008, 13:24

А зафига он уничтожается, если ты пользователю еще попытку дать хочешь? Smile
это тест был) по поводу второго раза появления диалога - тож мой косяк, не уследил в одном месте =)
вобщем у меня всё нормально, ошибку отрабатывает нормально и приложение не вылетает. так что, Toshiba, чот странно у тебя. если трейсить, то тоже вылетает на той же строке??

RedAndBlack
Сообщения: 24
Зарегистрирован: 16 авг 2007, 07:18

Сообщение RedAndBlack » 28 мар 2008, 13:27

Toshiba писал(а): КАК???????

Код: Выделить всё

try
  database.connected := True;
except
  messagedlg('чот не хотит коннектится, видать логин/пассвард не тот :(', mtError, [mbOk], 0);
end;
вообще можно и с кодами ошибок намутить чего-нить ;)

Ответить