Страница 1 из 3
Авторизация пользователя через созданную форму в Delphi
Добавлено: 28 мар 2008, 07:16
Toshiba
Всем привет! У меня вопрос следующего содержания:
Хочу подключаться к базе InterBase через свою созданную форму авторизации! При не правильном вводе пользователя сообщается ошибка, о том что спросите своего админа БД о пароле или имени пользователя! Псоле этого приложуха выкидывается! Хочется сделать так чтобы просто выкидывалось свое диалоговое окно о том что введен не правильный пароль или логин! Так каким компонентом пользоваться? пробовал такую штуку
try
base.connected:=true;
except
........
end;
все равно не помогает! Помогите плиз, люди добрые!
Добавлено: 28 мар 2008, 09:17
kdv
все равно не помогает! Помогите плиз, люди добрые!
минимум лет десять на массе дельфевых сайтов есть туча подобных примеров. Плюс, подозреваю, этот вопрос описан в любой книжке по дельфям, в которой описано программирование работы с БД.
Так каким компонентом пользоваться?
хрен его знает. а какими Вы пользуетесь?
Добавлено: 28 мар 2008, 09:24
Toshiba
Передо мной эта книга лежит...там и описан метод try....excepт
Но никак он не работает ибо на мой взгляд данная ошибка вызывается сервером InterBase....инет на данную тему прорыл как мог..ничего путного не нашел! Может кто и ссылку даст - буду благодарен!
Добавлено: 28 мар 2008, 09:39
Gera
как именно не работает?
не переходит в Except блок или все равно появляется стандартное сообщение?
Добавлено: 28 мар 2008, 09:40
kdv
Передо мной эта книга лежит...там и описан метод try....excepт
при чем тут try except? надо событие OnLogin переписать. по нему в дельфях есть хелп.
и, последний раз спрашиваю - какой набор компонент используете - ADO, IBX, BDE, dbExpress?
Добавлено: 28 мар 2008, 11:45
RedAndBlack
тоже столкнулся с такой проблемой. использую ibx. покопавшись в исходниках, понял, что для проверки соединения нужно использовать ibapi. ну и прежде чем собственно соединение осуществить, нужно довольно много кода написать. в fbplus есть errorhandler, собстна через него можно что-то сделать. но должно же быть решение проще))
Добавлено: 28 мар 2008, 11:47
Toshiba
Использую IBX...а try ....except.. все равно выполняет подключение к IB а она в свою очередь выдает ошибку - спрочите логин или пароль у админа...надо просто эту ошибку перехватить или еще что то в этом роде
Добавлено: 28 мар 2008, 11:49
RedAndBlack
вот вот, туда же и залез =)
Добавлено: 28 мар 2008, 11:56
Toshiba
Вот код:
Код: Выделить всё
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;
Добавлено: 28 мар 2008, 11:59
WildSery
Студенты активизировались, что ли?
Какой хендлер? Какой API? Просто пытаешься подключиться, этого достаточно для проверки возможности подключения.
"lc_ctype=none" это из каких соображений?
"Весь интернет перерыл" - враньё. Оба, марш
вот эту статью читать.
Добавлено: 28 мар 2008, 12:02
Toshiba
И что при простом подключении не выдает ошибку если ползователь введен неверно? - проверь! Я уже сутки сижу..статью которую ты дал - уже читал - ничего там про это не написанно - это исключении при конекте! "lc_ctype=none" - это из соображений что связываемся с 1с! а она выгружать из себя может тока в такой кодировки!
Добавлено: 28 мар 2008, 12:03
RedAndBlack
читали тыщу раз статью. просто проблема наверное неправильно выражена.
Код: Выделить всё
try
Database.Connected := True;
Result := True;
except
ShowMessage('не законнектились');
Result := False;
end;
у меня при эксепшене приложение выдает сначала 'не законнектились', потом интербейзовское сообщение. чот ваще непонятно =\
Добавлено: 28 мар 2008, 12:07
RedAndBlack
вообще хочется чтобы свой logindialog показывался до тех пор, пока не законнектимся или не нажмём 'cancel'.
з.ы. блин, а утром придя на работу хотел покопаться в другом =)
Добавлено: 28 мар 2008, 12:18
WildSery
Toshiba писал(а):"lc_ctype=none" - это из соображений что связываемся с 1с! а она выгружать из себя может тока в такой кодировки!
1C вообще не умеет "из себя выгружать" в IB/FB ни в каком виде. Потому эту фразу я не понял.
И наоборот, загружать в IB/FB базу не обязательно в той кодировке, в которой получил данные (если, конечно, не юникод с разными "раскладками" одновременно).
RedAndBlack писал(а):сначала 'не законнектились', потом интербейзовское сообщение
Вероятно, дальше по коду ты что-то пытаешься сделать с этим несостоявшимся соединением.
Что за ошибка-то?
Добавлено: 28 мар 2008, 12:23
Toshiba
Выгрузку из 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'
Добавлено: 28 мар 2008, 12:55
RedAndBlack
WildSery писал(а):
RedAndBlack писал(а):сначала 'не законнектились', потом интербейзовское сообщение
Вероятно, дальше по коду ты что-то пытаешься сделать с этим несостоявшимся соединением.
Что за ошибка-то?
далее ничего не делается, датамодуль, где находится база, уничтожается. ошибка та же, что и у Toshiba.
Добавлено: 28 мар 2008, 13:20
stix-s
RedAndBlack писал(а):далее ничего не делается, датамодуль, где находится база, уничтожается. ошибка та же, что и у Toshiba.
А зафига он уничтожается, если ты пользователю еще попытку дать хочешь?

и что, при успехе тоже без датамодуля работать?
ошибку IB можно вообще-то перехватить и вывести сообщение на великом и могучем.
Код: Выделить всё
try
logfm:=Tlogfm.Create(application);
logfm.Showmodal;
//и делай ты в этой форме что хочешь, хоть фишечки, хоть рюшечки
//проверяй правильность пароля, выставляй счетчик ошибок, ну что хошь, в общем, пока не скажешь там, что logfm.Modalresult:=......
finally
logfm.release;
end;
Добавлено: 28 мар 2008, 13:21
Toshiba
stix-s писал(а):RedAndBlack писал(а):ошибку IB можно вообще-то перехватить и вывести сообщение на великом и могучем.
КАК???????
Добавлено: 28 мар 2008, 13:24
RedAndBlack
А зафига он уничтожается, если ты пользователю еще попытку дать хочешь? Smile
это тест был) по поводу второго раза появления диалога - тож мой косяк, не уследил в одном месте =)
вобщем у меня всё нормально, ошибку отрабатывает нормально и приложение не вылетает. так что, Toshiba, чот странно у тебя. если трейсить, то тоже вылетает на той же строке??
Добавлено: 28 мар 2008, 13:27
RedAndBlack
Toshiba писал(а):
КАК???????
Код: Выделить всё
try
database.connected := True;
except
messagedlg('чот не хотит коннектится, видать логин/пассвард не тот :(', mtError, [mbOk], 0);
end;
вообще можно и с кодами ошибок намутить чего-нить
