|
|
/////////////////////////////////////////////////////////////////////////////
//
// Copyright(C) 2000 Microsoft Corporation all rights reserved.
//
// Module: ObjectsCommand.H
//
// Project: Windows 2000 IAS
//
// Description: Declaration of the the Object Commands classes
//
// Author: tperraut
//
// Revision 02/24/2000 created
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Objects.h"
//////////////////////////////////////////////////////////////////////////////
// class CObjectsCommandGet
//////////////////////////////////////////////////////////////////////////////
CObjects::CObjectsCommandGet::CObjectsCommandGet(CSession& CurrentSession) { Init(CurrentSession); }
/////////////
// GetObject
/////////////
HRESULT CObjects::CObjectsCommandGet::GetObject( _bstr_t& Name, LONG& Identity, LONG Parent ) { m_ParentParam = Parent; HRESULT hr = BaseExecute(); if ( SUCCEEDED(hr) ) { Identity = m_Identity; Name = m_Name; } return hr; }
/////////////////////////
// GetObject overloaded
/////////////////////////
HRESULT CObjects::CObjectsCommandGet::GetObject( _bstr_t& Name, LONG& Identity, LONG Parent, LONG Index ) { m_ParentParam = Parent;
HRESULT hr = BaseExecute(Index); if ( SUCCEEDED(hr) ) { Identity = m_Identity; Name = m_Name; } return hr; }
//////////////////////////////////////////////////////////////////////////////
// class CObjectsCommandPath
//////////////////////////////////////////////////////////////////////////////
CObjects::CObjectsCommandPath::CObjectsCommandPath(CSession& CurrentSession) { Init(CurrentSession); }
////////////
// WalkPath
////////////
void CObjects::CObjectsCommandPath::WalkPath( LPCWSTR Path, LONG& Identity, LONG Parent // = 1 in header
) { _ASSERTE(Path); if ( !Path ) { _com_issue_error(E_INVALIDARG); }
LONG CurrentParent = Parent;
const WCHAR *p = Path; while ( *p ) // ok to dereference
{ m_ParentParam = CurrentParent; lstrcpynW(m_NameParam, p, NAME_SIZE);
_com_util::CheckError(BaseExecute()); CurrentParent = m_Identity; p += lstrlenW(p); // go past the \0
++p; } Identity = CurrentParent; }
//////////////////////////////////////////////////////////////////////////////
// class CObjectsCommandIdentity
//////////////////////////////////////////////////////////////////////////////
CObjects::CObjectsCommandIdentity::CObjectsCommandIdentity( CSession& CurrentSession ) { Init(CurrentSession); }
/////////////////////
// GetObjectIdentity
/////////////////////
HRESULT CObjects::CObjectsCommandIdentity::GetObjectIdentity( _bstr_t& Name, LONG& Parent, LONG Identity ) { m_IdentityParam = Identity;
HRESULT hr = BaseExecute(); if ( SUCCEEDED(hr) ) { Name = m_Name; Parent = m_Parent; } return hr; }
//////////////////////////////////////////////////////////////////////////////
// class CObjectsCommandNameParent
//////////////////////////////////////////////////////////////////////////////
CObjects::CObjectsCommandNameParent::CObjectsCommandNameParent( CSession& CurrentSession ) { Init(CurrentSession); }
////////////////////////////////////////
// GetObjectNameParent
//
// works on CObjectsAccSelectNameParent
////////////////////////////////////////
HRESULT CObjects::CObjectsCommandNameParent::GetObjectNameParent( const _bstr_t& Name, LONG Parent, LONG& Identity ) { lstrcpynW(m_NameParam, Name, NAME_SIZE); m_ParentParam = Parent; HRESULT hr = BaseExecute(); if ( SUCCEEDED(hr) ) { Identity = m_Identity; } return hr; }
//////////////////////////////////////////////////////////////////////////////
// class CObjectsCommandDelete
//////////////////////////////////////////////////////////////////////////////
CObjects::CObjectsCommandDelete::CObjectsCommandDelete( CSession& CurrentSession ) { Init(CurrentSession); }
//////////////////////////////
// DeleteObject
//
// works on CObjectsAccDelete
//////////////////////////////
HRESULT CObjects::CObjectsCommandDelete::DeleteObject(LONG Identity) { // Set properties for open
CDBPropSet propset(DBPROPSET_ROWSET); propset.AddProperty(DBPROP_IRowsetChange, true); propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_DELETE);
m_IdentityParam = Identity; HRESULT hr = Open(&propset); Close(); return hr; }
//////////////////////////////////////////////////////////////////////////////
// class CObjectsCommandInsert
//////////////////////////////////////////////////////////////////////////////
CObjects::CObjectsCommandInsert::CObjectsCommandInsert( CSession& CurrentSession ) :m_Session(CurrentSession) { Init(CurrentSession); }
//////////////////////////////
// InsertObject
//
// works on CObjectsAccInsert
//////////////////////////////
BOOL CObjects::CObjectsCommandInsert::InsertObject( const _bstr_t& Name, LONG Parent, LONG& Identity ) { ClearRecord();
CDBPropSet propset(DBPROPSET_ROWSET); propset.AddProperty(DBPROP_IRowsetChange, true); propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT ); lstrcpynW(m_NameParam, Name, NAME_SIZE); m_ParentParam = Parent; HRESULT hr = Open(&propset); if ( hr == S_OK ) { CObjectsCommandNameParent NameParent(m_Session); _com_util::CheckError(NameParent.GetObjectNameParent( Name, Parent, Identity )); Close(); return TRUE; } else { // ignore the real error.
// the assumption here is that if I can't insert, that's because
// the object already exists
return FALSE; } }
|