![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Смена пароля в IBase [D7, IB7]
psa247 © (2008-02-25 18:38:00)Скажите, почему не результат функция возвращает True
но пароль все равно не меняется
function TData.ChangePass(param : TUser): boolean;
begin
try
CloseConnections;
OpenConnections(SuperUser);
IBSecurityService.Active := True;
IBSecurityService.UserName := param.Name;
IBSecurityService.Password := param.Pass;
IBSecurityService.FirstName := '';
IBSecurityService.MiddleName := '';
IBSecurityService.LastName := '';
try
IBSecurityService.ModifyUser;
Result := True;
except
Result := False;
end ;
IBSecurityService.Active := False;
except
Result := False;
end;
CloseConnections;
end;
где
type
TUser = class
Name: string;
Pass: string;
NewPass: string;
Path: string;
BaseName: string;
Right: boolean;
end;
Johnmen (2008-04-24 00:03:00) [1]Ё-моё, ну что за мода пошла на гробокопательство и некрофилию? Заняться что-ли нечем? Словарик англо-русский почитал бы - узнал бы много полезного. Что Джей Ди это JD, а не то букоффсочетание, коем себя обозначил...
Loginov Dmitry (2008-04-23 22:52:00) [2]> Может, уже поздно, но как вариант могу предложить.
Насколько помнится, в IBSecurityService параметры коннекта, заданные в design-time слетают. Их нужно заново указывать в run-time.
DjeiDi (2008-04-23 22:43:00) [3]Может, уже поздно, но как вариант могу предложить.
Эту часть
try
IBSecurityService.ModifyUser;
Result := True;
except
Result := False;
end ;
переписать следующим образом:
try
// здесь пробуешь
IBSecurityService.ModifyUser;
except
// если не получилось, функция возвратит ЛОЖЬ и прервется
Result := False;
Exit;
end ;
// в случае успеха, функция вернет ИСТИНУ
Result := True;
IBSecurityService.Active := False;
Ну и как другой вариант попробуй переписать функцию так
function TData.ChangePass(param : TUser): boolean;
begin
CloseConnections;
try
OpenConnections(SuperUser);
except
Result := False;
Exit;
end;
IBSecurityService.Active := True;
IBSecurityService.UserName := param.Name;
IBSecurityService.Password := param.Pass;
IBSecurityService.FirstName := '';
IBSecurityService.MiddleName := '';
IBSecurityService.LastName := '';
try
IBSecurityService.ModifyUser;
except
Result := False;
Exit;
end ;
Result := True;
IBSecurityService.Active := False;
CloseConnections;
end;
psa247 (2008-02-27 17:31:00) [4]
> Johnmen © (26.02.08 22:07) [5]
На том и договорились. Не понимаешь - проходим мимо
Johnmen (2008-02-26 22:07:00) [5]
> psa247 (26.02.08 21:36) [4]
> Нет, может пояснишь ?
Нет, я тоже не понимаю.
psa247 (2008-02-26 21:36:00) [6]
> Johnmen ©
Нет, может пояснишь ?
Johnmen (2008-02-25 21:11:00) [7]Интересно, ты сам то понимаешь, что пишешь?
psa247 (2008-02-25 20:03:00) [8]procedure TData.CloseConnections;
begin
// Закрываем соединение
try
if IBDatabase <> nil then
begin
IBDatabase.Connected := False;
IBDatabase.Close;
end;
except
Application.MessageBox('Ошибка закрытия ИБ !','Внимание !',MB_ICONERROR);
end;
end;
function TData.OpenConnections(param: TUser): string;
begin
CloseConnections;
// Открываем соединение
try
if IBDatabase <> nil then
begin
IBDatabase.DatabaseName := param.Path;
IBDatabase.LoginPrompt := False;
IBDatabase.SQLDialect := 3;
IBDatabase.Params.Clear;
IBDatabase.Params.Add('CONNECT DATABASE '+param.BaseName);
IBDatabase.Params.Add('USER_NAME='+param.Name);
IBDatabase.Params.Add('PASSWORD='+param.Pass);
IBDatabase.Params.Add('lc_ctype=WIN1251');
IBDatabase.Connected := True;
Result := '';
end;
except
Result := param.Path;
if GetLastError<>0 then
Result := SysErrorMessage(GetLastError) +chr(13)+ Result;
end;
end;
SuperUser - SYSDBA
в параметре процедуры передается "пользователь" для которого меняется пароль
Johnmen (2008-02-25 19:19:00) [9]Во-первых, что за "CloseConnections" и "OpenConnections"?
Во-вторых, не ясно, указаны ли параметры пользователя при коннекте.
И в-третьих, известный баг метода ModifyUser, приводящий к добавлению юзера, исправлен только в прошлом году в последней версии IBX.