Groups 및 Users Append, ChangePassword 메서드 예제(VC++)
이 예제에서는 시스템에 새 Group 및 새 User를 추가하여 Groups의 Append 메서드와 Users의 Append 메서드를 보여 줍니다. 새 Group이 새 User의 Groups 컬렉션에 추가됩니다. 따라서 새 User가 Group에 추가됩니다. 또한 ChangePassword 메서드는 User 암호를 지정하는 데 사용됩니다.
참고
Windows 인증을 지원하는 데이터 원본 공급자에 연결하는 경우 연결 문자열의 사용자 ID 및 암호 정보 대신 Trusted_Connection=yes 또는 Integrated Security=SSPI를 지정해야 합니다.
// BeginGroupCpp.cpp
// compile with: /EHsc
#import "msadox.dll" no_namespace
#include "iostream"
using namespace std;
inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);};
int main() {
if (FAILED(::CoInitialize(NULL)) )
return -1;
HRESULT hr = S_OK;
// Define and initialize ADOX object pointers. These are in ADODB namespace.
_CatalogPtr m_pCatalog = NULL;
_UserPtr m_pUserNew = NULL;
_UserPtr m_pUser = NULL;
_GroupPtr m_pGroup = NULL;
// Define String Variables.
_bstr_t strCnn("Provider='Microsoft.JET.OLEDB.4.0';Data source = 'c:\\Northwind.mdb';jet oledb:system database='c:\\system.mdw'");
try {
TESTHR(hr = m_pCatalog.CreateInstance(__uuidof (Catalog)));
m_pCatalog->PutActiveConnection(strCnn);
// Create and append new group with a string.
m_pCatalog->Groups->Append("Accounting");
// Create and append new user with an object.
TESTHR(hr = m_pUserNew.CreateInstance(__uuidof(User)));
m_pUserNew->PutName("Pat Smith");
m_pUserNew->ChangePassword("", "Password1");
m_pCatalog->Users->Append(_variant_t((IDispatch *)m_pUserNew), "");
// Make the user Pat Smith a member of the Accounting group by creating and adding the
// appropriate Group object to the user's Groups collection. The same is accomplished if a User
// object representing Pat Smith is created and appended to the Accounting group Users collection
m_pUserNew->Groups->Append("Accounting");
// Enumerate all User objects in the catalog's Users collection.
long lUsrIndex;
long lGrpIndex;
_variant_t vIndex;
for ( lUsrIndex = 0 ; lUsrIndex < m_pCatalog->Users->Count ; lUsrIndex++ ) {
vIndex = lUsrIndex;
m_pUser = m_pCatalog->Users->GetItem(vIndex);
cout << " " << m_pUser->Name << endl;
cout << " Belongs to these groups:" << endl;
// Enumerate all Group objects in each User object's Groups collection.
if (m_pUser->Groups->Count != 0)
for ( lGrpIndex = 0 ; lGrpIndex < m_pUser->Groups->Count ; lGrpIndex++ ) {
vIndex = lGrpIndex;
m_pGroup = m_pUser->Groups->GetItem(vIndex);
cout << " " << m_pGroup->Name << endl;
}
else
cout << " [None]" << endl;
}
// Enumerate all Group objects in the default workspace's Groups collection.
for ( lGrpIndex = 0 ; lGrpIndex < m_pCatalog->Groups->Count ; lGrpIndex++ ) {
vIndex = lGrpIndex;
m_pGroup = m_pCatalog->Groups->GetItem(vIndex);
cout << " " << m_pGroup->Name << endl;
cout << " Has as its members:" << endl;
// Enumerate all User objects in each Group object's Users Collection.
if ( m_pGroup->Users->Count != 0)
for ( lUsrIndex = 0 ; lUsrIndex < m_pGroup->Users->Count ; lUsrIndex++ ) {
vIndex = lUsrIndex;
m_pUser = m_pGroup->Users->GetItem(vIndex);
cout << " " << m_pUser->Name << endl;
}
else
cout << " [None]" << endl;
}
// Delete new User and Group object because this is only a demonstration.
m_pCatalog->Users->Delete("Pat Smith");
m_pCatalog->Groups->Delete("Accounting");
}
catch(_com_error &e) {
// Notify the user of errors if any.
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
printf("\n\tSource : %s \n\tdescription : %s \n ", (LPCSTR)bstrSource, (LPCSTR)bstrDescription);
}
catch(...) {
cout << "Error occurred in include files...." << endl;
}
::CoUninitialize();
}