![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выуживание ошибки Оракла через BDE [D7]
Iuliy © (2007-03-21 11:19:00)Вот собственно проблемный текст, возможно я не так что то делаю:
oracle_connection : TDatabase
log,passwd : String
{.........}
Oracle_connection.Params.Add(passwd);
Oracle_connection.Params.Add(log);
try
oracle_connection.Connected:=true;
{ действия }
except
on E0 : Exception do
begin
ShowMessage(E0.ClassName+' exception '+E0.Message);
end;
end;
{........}
Значения пароля и логина беру из формы. При неправильных значениях получаю всегда одинаковую ошибку: ORA-01012: not logged on
При правильных данных програма работает нормально. Но мне нужно знать точную ошибку оракла, например неверный пароль или учетная запись не существует. Может кто подсказать как ? Заранее благодарю.
Iuliy (2007-03-22 13:27:00) [1]BDE жжет.
Ковырнул низкоуровневые функции и получил тот же едрен батон:
dbires:= DbiOpenDatabase
( PChar('TEST'),
nil,
dbiReadWrite,
dbiOpenShared,
PChar(passwd0),
1,
@Options,
PChar(log0),
hDB
);
if(dbires<>DBIERR_NONE) then
begin
SetLength(Errstr, DBIMAXMSGLEN);
DbiGetErrorContext(ecNATIVECODE, PChar(Errstr));
SetLength(Errstr, StrLen(PChar(Errstr)));
if (Errstr > '') then
ShowMessage(format('Error context string: %s',[Errstr]));
И снова имею тот же проклятый ORA-01012
Iuliy (2007-03-21 18:26:00) [2]Усиленно изучаю BDE API, похоже ничего другого не остается
Iuliy (2007-03-21 13:00:00) [3]
> on E0 : Exception do
>
> Нужно использовать специфичный для bde потомок Exception
> и его массив ошибок
Сменил Exception на EDBEngineException ничего не поменялось, все тот же ORA - 01012
Reindeer Moss Eater (2007-03-21 12:40:00) [4]on E0 : Exception do
Нужно использовать специфичный для bde потомок Exception и его массив ошибок
Iuliy (2007-03-21 12:19:00) [5]При залогинивании при помощи PL/SQL developera при аналогичных входных данных я получаю совсем иной результат ORA-01017 ( при неверном логине/пасворде) и приглашение сменить пароль при устаревшем пароле. Мне нужно вставить такое же приглашение в клиент ( по сути вызов PL/SQL процедуры для новых данных, при устаревшем пароле ) но я не могу выловить ситуацию когда он устарел.
ANB (2007-03-21 11:31:00) [6]
> Но мне нужно знать точную ошибку оракла, например неверный
> пароль или учетная запись не существует
Дык это спецом сделано для повышения безопасности. Чтобы низзя было по очереди подбирать сначала логин, а потом пароль. И, типа, нефиг. Впрочем, если сильно сильно охота, создай бесправного юзера с грантом на чтение all_users. Тогда сможешь неявно коннектится под ним и проверять правильность логина. Хотя, ИМХО - извращение это.
Reindeer Moss Eater (2007-03-21 11:28:00) [7]Никак.
Сам оракл не говорит о том, что именно неверно - логин или пароль.