|
|
/////////////////////////////////////////////////////////////////////////////
//
// Copyright(C) 2000 Microsoft Corporation all rights reserved.
//
// Module: Properties.cpp
//
// Project: Windows 2000 IAS
//
// Description: Implementation of the CProperties class
//
// Author: tperraut
//
// Revision 02/24/2000 created
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Properties.h"
//////////////////////////////////////////////////////////////////////////
// class CProperties
//////////////////////////////////////////////////////////////////////////
//Constructor
//////////////
CProperties::CProperties(CSession& SessionParam) :m_PropertiesCommandGet(SessionParam), m_PropertiesCommandGetByName(SessionParam), m_PropertiesCommandInsert(SessionParam), m_PropertiesCommandDelete(SessionParam), m_PropertiesCommandDeleteMultiple(SessionParam) { };
//////////////
// Destructor
//////////////
CProperties::~CProperties() { };
///////////////
// GetProperty
///////////////
HRESULT CProperties::GetProperty( LONG Bag, _bstr_t& Name, LONG& Type, _bstr_t& StrVal ) { return m_PropertiesCommandGet.GetProperty( Bag, Name, Type, StrVal ); }
///////////////////
// GetNextProperty
///////////////////
HRESULT CProperties::GetNextProperty( LONG Bag, _bstr_t& Name, LONG& Type, _bstr_t& StrVal, LONG Index ) { return m_PropertiesCommandGet.GetProperty( Bag, Name, Type, StrVal, Index ); }
/////////////////////
// GetPropertyByName
/////////////////////
HRESULT CProperties::GetPropertyByName( LONG Bag, const _bstr_t& Name, LONG& Type, _bstr_t& StrVal ) { return m_PropertiesCommandGetByName.GetPropertyByName( Bag, Name, Type, StrVal ); }
//////////////////////////////////
// InsertProperty
// throw an exception if it fails
//////////////////////////////////
void CProperties::InsertProperty( LONG Bag, const _bstr_t& Name, LONG Type, const _bstr_t& StrVal ) { m_PropertiesCommandInsert.InsertProperty( Bag, Name, Type, StrVal ); }
//////////////////////////////////
// DeleteProperty
// throw an exception if it fails
//////////////////////////////////
void CProperties::DeleteProperty( LONG Bag, const _bstr_t& Name ) { m_PropertiesCommandDelete.DeleteProperty( Bag, Name ); }
//////////////////////////
// DeletePropertiesExcept
//////////////////////////
void CProperties::DeletePropertiesExcept( LONG Bag, const _bstr_t& Exception ) { m_PropertiesCommandDeleteMultiple.DeletePropertiesExcept(Bag, Exception); }
///////////////////////////////////////////////////
// UpdateProperty
// throw an exception if it fails
// Improvement possible: create a SQL statement
// to update instead of doing a delete then insert
///////////////////////////////////////////////////
void CProperties::UpdateProperty( LONG Bag, const _bstr_t& Name, LONG Type, const _bstr_t& StrVal ) { try { m_PropertiesCommandDelete.DeleteProperty( Bag, Name ); } catch(...) { // ignore the failure. If delete fails but insert works, that's ok
} m_PropertiesCommandInsert.InsertProperty( Bag, Name, Type, StrVal ); }
//////////////////////////////////////////////////////////////////////////////
// class CPropertiesCommandGet
//////////////////////////////////////////////////////////////////////////////
CProperties::CPropertiesCommandGet::CPropertiesCommandGet( CSession& CurrentSession ) { Init(CurrentSession); };
///////////////
// GetProperty
///////////////
HRESULT CProperties::CPropertiesCommandGet::GetProperty( LONG Bag, _bstr_t& Name, LONG& Type, _bstr_t& StrVal ) { m_BagParam = Bag;
HRESULT hr = BaseExecute(); if ( SUCCEEDED(hr) ) { Name = m_Name; Type = m_Type; StrVal = m_StrVal; } return hr; }
//////////////////////////
// GetProperty overloaded
//////////////////////////
HRESULT CProperties::CPropertiesCommandGet::GetProperty( LONG Bag, _bstr_t& Name, LONG& Type, _bstr_t& StrVal, LONG Index ) { m_BagParam = Bag;
HRESULT hr = BaseExecute(Index); if ( SUCCEEDED(hr) ) { Name = m_Name; Type = m_Type; StrVal = m_StrVal; } return hr; }
//////////////////////////////////////////////////////////////////////////////
// class CPropertiesCommandGetByName
//////////////////////////////////////////////////////////////////////////////
CProperties::CPropertiesCommandGetByName::CPropertiesCommandGetByName( CSession& CurrentSession ) { Init(CurrentSession); };
//////////////////////
// GetPropertyByName
//////////////////////
HRESULT CProperties::CPropertiesCommandGetByName::GetPropertyByName( LONG Bag, const _bstr_t& Name, LONG& Type, _bstr_t& StrVal ) { m_BagParam = Bag; if ( Name.length() ) { lstrcpynW(m_NameParam, Name, NAME_SIZE); }
HRESULT hr = BaseExecute(); if ( SUCCEEDED(hr) ) { Type = m_Type; StrVal = m_StrVal; } return hr; };
//////////////////////////////////////////////////////////////////////////////
// class CPropertiesCommandInsert
//////////////////////////////////////////////////////////////////////////////
CProperties::CPropertiesCommandInsert::CPropertiesCommandInsert( CSession& CurrentSession ) { Init(CurrentSession); }
//////////////////
// InsertProperty
//////////////////
void CProperties::CPropertiesCommandInsert::InsertProperty( LONG Bag, const _bstr_t& Name, LONG Type, const _bstr_t& StrVal ) { ClearRecord(); m_BagParam = Bag; if ( Name.length() ) { lstrcpynW(m_NameParam, Name, NAME_SIZE); } m_TypeParam = Type; if ( StrVal.length() ) { lstrcpynW(m_StrValParam, StrVal, STRVAL_SIZE); }
CDBPropSet propset(DBPROPSET_ROWSET); propset.AddProperty(DBPROP_IRowsetChange, true); propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT );
_com_util::CheckError(Open(&propset)); Close(); }
//////////////////////////////////////////////////////////////////////////////
// class CPropertiesCommandDelete
//////////////////////////////////////////////////////////////////////////////
CProperties::CPropertiesCommandDelete::CPropertiesCommandDelete( CSession& CurrentSession ) { Init(CurrentSession); }
//////////////////
// DeleteProperty
//////////////////
void CProperties::CPropertiesCommandDelete::DeleteProperty( LONG Bag, const _bstr_t& Name ) { m_BagParam = Bag; lstrcpynW(m_NameParam, Name, NAME_SIZE);
CDBPropSet propset(DBPROPSET_ROWSET); propset.AddProperty(DBPROP_IRowsetChange, true); propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_DELETE );
_com_util::CheckError(Open(&propset)); Close(); }
//////////////////////////////////////////////////////////////////////////////
// class CPropertiesCommandDeleteMultiple
//////////////////////////////////////////////////////////////////////////////
CProperties::CPropertiesCommandDeleteMultiple:: CPropertiesCommandDeleteMultiple(CSession& CurrentSession) { Init(CurrentSession); }
//////////////////
// DeleteProperty
//////////////////
void CProperties::CPropertiesCommandDeleteMultiple::DeletePropertiesExcept( LONG Bag, const _bstr_t& Exception ) { m_BagParam = Bag; lstrcpynW(m_ExceptionParam, Exception, SIZE_EXCEPTION_MAX);
CDBPropSet propset(DBPROPSET_ROWSET); propset.AddProperty(DBPROP_IRowsetChange, true); propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_DELETE );
Open(&propset); // ignore the result
Close(); }
|