Конференция "Базы" » Смена пароля в IBase [D7, IB7]
 
  • psa247 (25.02.08 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 © (25.02.08 19:19) [1]
    Во-первых, что за "CloseConnections" и "OpenConnections"?
    Во-вторых, не ясно, указаны ли параметры пользователя при коннекте.
    И в-третьих, известный баг метода ModifyUser, приводящий к добавлению юзера, исправлен только в прошлом году в последней версии IBX.
  • psa247 (25.02.08 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 © (25.02.08 21:11) [3]
    Интересно, ты сам то понимаешь, что пишешь?
  • psa247 (26.02.08 21:36) [4]

    > Johnmen ©

    Нет, может пояснишь ?
  • Johnmen © (26.02.08 22:07) [5]

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

    Нет, я тоже не понимаю.
  • psa247 (27.02.08 17:31) [6]

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

    На том и договорились. Не понимаешь - проходим мимо
  • DjeiDi (23.04.08 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 © (23.04.08 22:52) [8]
    > Может, уже поздно, но как вариант могу предложить.


    Насколько помнится, в IBSecurityService параметры коннекта, заданные в design-time слетают. Их нужно заново указывать в run-time.
  • Johnmen © (24.04.08 00:03) [9]
    Ё-моё, ну что за мода пошла на гробокопательство и некрофилию? Заняться что-ли нечем? Словарик англо-русский почитал бы - узнал бы много полезного. Что Джей Ди это JD, а не то букоффсочетание, коем себя обозначил...
 
Конференция "Базы" » Смена пароля в IBase [D7, IB7]
Есть новые Нет новых   [134432   +19][b:0][p:0.001]