Publish date: 2003-01-05
Work with BLOB fields and parameters
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; // Getting data from binary BLOB (SUBTYPE 2) // Function converts a binary BLOB into string 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; // The note. // For getting data from text BLOB does not cost convert the value through GetTextBlob function