English version Russian version





function TPxUserConfigurator.SaveMenuToUser(const strUserName, strMenu: WideString): HResult;
 var
   cmd: _Command;
   ra: OleVariant;
 begin
   Result := S_OK;
   cmd := CoCommand.Create;
   cmd.Set_ActiveConnection(GetConnection);
   try
     cmd.Set_CommandText('update umenus set menu = ? where username= ?');
     cmd.Parameters.Append(cmd.CreateParameter('username', adVarChar, adParamInput, length(strUserName), strUserName))

     if strMenu <> EmptyStr then
       cmd.Parameters.Append(cmd.CreateParameter('menu', adLongVarChar, adParamInput, length(strMenu), strMenu))
     else
       cmd.Parameters.Append(cmd.CreateParameter('menu', adLongVarChar, adParamInput, 0, Null));
     cmd.Execute(ra, EmptyParam, 0);
     SetComplete;
   except
     on E: Exception do begin
       Result := E_FAIL;
       SetAbort;
       raise;
     end;
   end;
 end;

 Получение данных из BLOB бинарного типа (SUBTYPE 2):

 function GetTextBlob(Value: Variant; ActualSize: integer): string;
 // функция конвертации бинарного блоба в строку.
 var
   P: pointer;
 begin
   Result := '';
   if Value = Null then
     Exit;
   P := VarArrayLock(Value);
   try
     SetLength(Result, ActualSize);
     Move(P^, Result[1], ActualSize);
   finally
     VarArrayUnlock(Value);
   end;
 end;


 function TPxUserConfigurator.LoadMenuFromUser(const strUserName: WideString; out strMenu: WideString): HResult;
 var
   rs: _Recordset;
   co: _Connection;
   ra: OleVariant;
 begin
   Result := S_OK;
   co := GetConnection;
   try
     rs := co.Execute('select menu from umenus ' +
       'where username = ''' + strUserName + '''', ra, 0);
     strMenu := GetTextBlob(rs.Fields['menu'].Value,
       rs.Fields['menu'].ActualSize);
     SetComplete;
   except
     on E: Exception do begin
       Result := E_FAIL;
       SetAbort;
       raise;
     end;
   end;
 end;

Примечание. Для получения данных из BLOB ткестового типа не стоит ковертировать значение функцией GetTextBlob


Назад Вперед Сборка сайта № 3.0.0.1682