Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.09;
Скачать: CL | DM;

Вниз

Смена пароля в IBase   Найти похожие ветки 

 
psa247   (2008-02-25 18:38) [0]

Скажите, почему не результат функция возвращает 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-02-25 19:19) [1]

Во-первых, что за "CloseConnections" и "OpenConnections"?
Во-вторых, не ясно, указаны ли параметры пользователя при коннекте.
И в-третьих, известный баг метода ModifyUser, приводящий к добавлению юзера, исправлен только в прошлом году в последней версии IBX.


 
psa247   (2008-02-25 20:03) [2]

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 21:11) [3]

Интересно, ты сам то понимаешь, что пишешь?


 
psa247   (2008-02-26 21:36) [4]


> Johnmen ©

Нет, может пояснишь ?


 
Johnmen ©   (2008-02-26 22:07) [5]


> psa247   (26.02.08 21:36) [4]
> Нет, может пояснишь ?

Нет, я тоже не понимаю.


 
psa247   (2008-02-27 17:31) [6]


> Johnmen ©   (26.02.08 22:07) [5]

На том и договорились. Не понимаешь - проходим мимо


 
DjeiDi   (2008-04-23 22:43) [7]

Может, уже поздно, но как вариант могу предложить.
Эту часть

  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;


 
Loginov Dmitry ©   (2008-04-23 22:52) [8]

> Может, уже поздно, но как вариант могу предложить.


Насколько помнится, в IBSecurityService параметры коннекта, заданные в design-time слетают. Их нужно заново указывать в run-time.


 
Johnmen ©   (2008-04-24 00:03) [9]

Ё-моё, ну что за мода пошла на гробокопательство и некрофилию? Заняться что-ли нечем? Словарик англо-русский почитал бы - узнал бы много полезного. Что Джей Ди это JD, а не то букоффсочетание, коем себя обозначил...



Страницы: 1 вся ветка

Текущий архив: 2008.11.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
4-1199729300
kichrot
2008-01-07 21:08
2008.11.09
Как скрыть окно проги при использование ShellExecute для печати?


3-1209041604
Uno-84
2008-04-24 16:53
2008.11.09
Left join по двум параметрам


15-1221054900
Синий палец
2008-09-10 17:55
2008.11.09
переходник для PCMCIA


8-1187616856
Иванн
2007-08-20 17:34
2008.11.09
разделить окружность на равные доли


6-1194787304
Olegz77
2007-11-11 16:21
2008.11.09
Indy: TIdPop3, TIdMessage