Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Смена пароля в 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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо