GetObjectOwner- und SetObjectOwner-Methoden – Beispiel (VC++)
In diesem Beispiel werden die Methoden GetObjectOwner und SetObjectOwner veranschaulicht. Dieser Code geht davon aus, dass die Gruppe „Accounting“ (Buchhaltung) vorhanden ist (Informationen zum Hinzufügen dieser Gruppe zum System finden Sie unter Append- und ChangePassword-Methode für Gruppen und Benutzer – Beispiel (VC++), um zu sehen, wie diese Gruppe dem System hinzugefügt wird). Der Besitzer der Tabelle „Kategorien“ ist auf „Accounting“ (Buchhaltung) festgelegt.
// BeginOwnersCpp.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 the ADODB namespace.
_TablePtr m_pTable = NULL;
_CatalogPtr m_pCatalog = NULL;
try {
TESTHR(hr = m_pCatalog.CreateInstance(__uuidof(Catalog)));
TESTHR(hr = m_pTable.CreateInstance(__uuidof(Table)));
// Open the Catalog.
m_pCatalog->PutActiveConnection("Provider='Microsoft.JET.OLEDB.4.0';data source='c:\\Northwind.mdb';jet oledb:system database='c:\\system.mdw'");
// Print the original owner of Categories
_bstr_t strOwner = m_pCatalog->GetObjectOwner("Categories", adPermObjTable);
cout << "Owner of Categories: " << strOwner << "\n" << endl;
//Create and append new group with a string.
m_pCatalog->Groups->Append("Accounting");
//Set the owner of Categories to Accounting.
m_pCatalog->SetObjectOwner("Categories", adPermObjTable, "Accounting");
_variant_t vIndex;
// List the owners of all tables and columns in the catalog.
for ( long iIndex = 0 ; iIndex < m_pCatalog->Tables->Count ; iIndex++ ) {
vIndex = iIndex;
m_pTable = m_pCatalog->Tables->GetItem(vIndex);
cout << "Table: " << m_pTable->Name << endl;
cout << " Owner: " << m_pCatalog->GetObjectOwner(m_pTable->Name, adPermObjTable) << endl;
}
// Restore the original owner of Categories
m_pCatalog->SetObjectOwner("Categories", adPermObjTable, strOwner);
// Delete Accounting
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();
}