382 lines
13 KiB
C++
382 lines
13 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// 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();
|
|
}
|
|
|