MORE INFORMATION
The
following file is available for download from the Microsoft Download
Center:
Release Date:
1-14-2000
For additional information about how to download Microsoft
Support files, click the following article number to view the article in the
Microsoft Knowledge Base:
119591 How to Obtain Microsoft Support Files from Online Services
Microsoft scanned this file for viruses. Microsoft used the most
current virus-detection software that was available on the date that the file
was posted. The file is stored on security-enhanced servers that help to
prevent any unauthorized changes to the file.
The ATLShape.exe file contains the following
files:
|
ATLShape.cpp | 15KB |
Test.mdb | 454KB |
Readme.txt | 15KB |
The ATLShape.exe sample allows the user to read from
either the Access 97 Test.mdb database or from a local SQL Server 7.0 Northwind
database. The hierarchical output is written to an Example.out text file. This
is achieved by setting up an appropriate connection string for
each:
For the Access 97 Database:
connection.OpenFromInitializationString(L"Provider=MSDataShape.1;Persist Security Info=False;
Data Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\\Test.mdb")
For the SQL Server 7.0 Database:
connection.OpenFromInitializationString(L"Provider=MSDataShape.1;Persist Security Info=False;
Data Provider=SQLOLEDB;Database=Northwind;Server=MySQLServer7;uid=sa;pwd=")
ATLShape also creates a CMyRowset class that is derived from the
CRowset class. The
CRowset class is provided by ATL OLE DB template libraries, which provide
the ability to perform hierarchical queries. This class maintains an m_hChapter
HCHAPTER variable that stores the HCHAPTER data type of the chaptered column in
the parent that is currently being accessed.
The child rowset is
obtained by performing an
IRowsetInfo::GetReferencedRowset method on the chaptered column as follows:
CComPtr<IRowset> spChildRowset;
CComPtr<IUnknown> spUnkRowset;
CComPtr<IRowsetInfo> spParent;
cLocalCommand.m_spRowset->QueryInterface(&spParent);
spParent->GetReferencedRowset(colNo, __uuidof(IRowset), &spUnkRowset);
spUnkRowset->QueryInterface(&spChildRowset);
In addition, an ATLOutputData template function is provided that reads
data from class rowsetClass and writes it to the FILE* that is passed to it:
template <class rowsetClass, class dataSource>
HRESULT ATLOutputData(rowsetClass &Rs, dataSource &db , FILE *fptr);
To retrieve data from the chaptered column, perform the following
steps:
- Instantiate the CMyRowset class:
CAccessorRowset<CDynamicAccessor, CMyRowset> tmpRowset;
- Assign the m_spRowset variable to contain the child rowset:
tmpRowset.m_spRowset = pChildIRowset;
- Assign the m_hChapter variable to the appropriate chaptered
column:
tmpRowset.m_hChapter = *(HCHAPTER*) LocalCommand.GetValue(_bstr_t( L"EmpOrders"));
- Bind the output columns:
hr = tmpRowset.Bind();
- Retrieve the data for the first row of the chaptered
column:
hr = tmpRowset.MoveFirst();
- Retrieve all the data from the child and write it to the
file:
hr = ATLOutputData(tmpRowset,*dummy,fptr);
Steps to Run the Application
- Create an empty Win32 console application.
- Insert the ATLShape.cpp file into the project.
- Copy the Test.mdb file into the project folder.
- Compile and run the application.