Exemplo dos métodos GetObjectOwner e SetObjectOwner (VC++)
Aplica-se ao: Access 2013, Office 2013
Este exemplo demonstra os métodos GetObjectOwner e SetObjectOwner. Esse código pressupõe a existência da Contabilidade do grupo (consulte o exemplo grupos e usuários append, métodos ChangePassword (VC++) para ver como adicionar esse grupo ao sistema). O proprietário da tabela Categories é definido como Accounting.
// BeginOwnersCpp
#import "c:\Program Files\Common Files\system\ado\msadox.dll" no_namespace
#include "iostream.h"
#include "stdio.h"
#include "conio.h"
//Function declarations
inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);};
void OwnersX(void);
//////////////////////////////////////////////////////////
// //
// Main Function //
// //
//////////////////////////////////////////////////////////
void main()
{
if(FAILED(::CoInitialize(NULL)))
return;
OwnersX();
::CoUninitialize();
}
//////////////////////////////////////////////////////////
// //
// OwnersX Function //
// //
//////////////////////////////////////////////////////////
void OwnersX()
{
HRESULT hr = S_OK;
// Define ADOX object pointers.
// Initialize pointers on define.
// These are in the ADOX:: 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:\\Program Files\\Microsoft Office\\"
"Office\\Samples\\Northwind.mdb';"
"jet oledb:system database='c:\\Program Files\\Microsoft Office\\"
"Office\\system.mdw'");
//Print the original owner of Categories
_bstr_t strOwner = m_pCatalog->GetObjectOwner("Categories",
adPermObjTable);
cout << "Owner of Categories: " << strOwner << "\n" << endl;
int iLineCnt = 2;
//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;
if (iLineCnt%16 == 0)
{
printf("\nPress any key to continue...\n");
getch();
}
iLineCnt = iLineCnt + 2;
}
//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 occured in include files...."<< endl;
}
}
// EndOwnersCpp