Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.21;
Скачать: [xml.tar.bz2];




Вниз

InterBase... 


$hade   (2002-01-24 15:46) [0]

Народ! Подскажите PLZ! Есть приложение работающее с Interbase...
перед подключением вводим пароль в свою форму...подключаемся...если пароль неправильный - снова показываем форму - снова воодим...и так пока не введем правильно или не нажмем отмену...
тока вот если первый раз ввели неправильно - на второй раз прога вылетает...Access Violation и так далее...
В чем косяк?
и как определить вообще какая ошибка была при подключении? (а то оно на все ругаеца просто - EInterbaseError или чтото подобное)...



Fareader   (2002-01-24 17:06) [1]

check:=false;

while not check do
try
database1.connected:=false;
database1.parambyname("user name").asstring:="ff";
database1.parambyname("password").asstring:="ff";
database1.connected:=true;
check:=true;
except
showmessage("пароль неверный!");
//Все остальное (вызов формы, очистка едитов и т.д.) - по вкусу
end;



$hade   (2002-01-24 17:12) [2]

ВОТ!!! ИМЕННО ТАК И НЕ РАБОТАЕТ!
то есть в except выводим сообщение...потом снова форму и проверяем пароль и...все...п...причем полный...
если с первого раза правильный парольввести - все нормально работает...



Иван Шихалев   (2002-01-24 17:27) [3]

Думаю, проблема где-то в уничтожении/создании формы.



Fareader   (2002-01-24 18:44) [4]

Выложи код в студию



$hade   (2002-01-25 15:14) [5]

хм...вот код... из файла проекта...
function Logon: word;
begin
Result := 0; // 0 - если все нормально...
if LoginForm.ShowModal = mrOK then
try
with MainForm, IBDataBase1 do
begin
DatabaseName := LoginForm.ComboBox2.Text;
Params.Clear;
Params.Add("USER_NAME=" + LoginForm.ComboBox1.Text);
Params.Add("password=" + LoginForm.Edit1.Text);
LoginPrompt := false;
Query1.Open; // при открытии запроса автоматом будет подключаться Database....
end;
except
on EIBInterBaseError do
begin
MessageDlg(" Bad Username or password. " + #10#13 + " Access Denied!", mtError, [mbOk], 0);
logon; // вот тут снова вызываем рекурсивно...))
end;
end
else
Result := 1;
end;

begin
Application.Initialize;
Application.Title := "**********";
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TLoginForm, LoginForm);
if Logon = 0 then
begin
Application.CreateForm(... );
...
Application.Run;
end
else
Application.Terminate;
end.



Fareader   (2002-01-25 17:06) [6]

Подожди а где еще раз

Application.CreateForm(TLoginForm, LoginForm);

????

Ты же второй раз форму не нарисовал, а функцию вызываешь.
лучше не так сделай.

Положи на LoginForm IBDataBase1 и обрабатывай коннект прямо на клике этой кнопки и пока не введут правильный пароль или не откажутся от своих притязаний - форму не закрывай.
На обаботчик



Desdechado   (2002-01-25 17:31) [7]

и что это за хитрый стиль - рекурсивно вызывать логон?!?!
тебе ж Fareader © (24.01.02 17:06) все показал - обычный цикл, никаких извратов. в нем и форму показывай, и обработку ошибки делай.




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.21;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.029 c
3-66434           Вика                  2002-01-26 12:52  2002.02.21  
ScrollBar в DBGrid кривой какой то :((


1-66583           yaJohn                2002-02-05 18:10  2002.02.21  
ActionList. Kto skazal


6-66634           Иван Мхитаров         2001-12-03 13:45  2002.02.21  
Использование TClientSocket внутри TServerClientThread


1-66610           foxbad                2002-02-06 12:47  2002.02.21  
Help !!! Как использовать TADO в своей DLL !!!


1-66607           oomneeq               2002-02-04 18:21  2002.02.21  
TFieldDef через TField ?