获取ACCESS2000数据库中所有表的名称
来源:程序员人生 发布时间:2013-12-26 22:21:57 阅读次数:2994次
void OpenSchemaX(TCHAR *TableName)
{
HRESULT hr = S_OK;
::CoInitialize(NULL); //初始化Com
IADORecordBinding *picRs = NULL;
_RecordsetPtr pRstSchema(
ADODB
Recordset
);
_ConnectionPtr pConnection(
ADODB
Connection
);
pConnection
>ConnectionString = TableName;
pConnection
>Provider =
Microsoft
Jet
OLEDB
;
try
{
pConnection
>Open(pConnection
>ConnectionString
adModeUnknown);
pRstSchema
>QueryInterface(
__uuidof(IADORecordBinding)
(LPVOID*)&picRs);
pRstSchema = pConnection
>OpenSchema(adSchemaTables);//枚举表的名称处理
while(!(pRstSchema
>EndOfFile))
{
CString strTableType;
_bstr_t table_name = pRstSchema
>Fields
>
GetItem(
TABLE_NAME
)
>Value;//获取表的名称
_bstr_t table_type = pRstSchema
>Fields
>
GetItem(
TABLE_TYPE
)
>Value;//获取表的类型
strTableType
Format(
%s
(LPCSTR) table_type);
if(!lstrcmp(strTableType
_T(
TABLE
)))
{
m_strList
AddString((LPCSTR) table_name);//添加表的名称
}
pRstSchema
>MoveNext();
}
// Clean up objects before exit
pRstSchema
>Close();
pConnection
>Close();
}
catch (_com_error &e)
{
// Notify the user of errors if any
// Pass a connection pointer accessed from the Connection
PrintProviderError(pConnection);
PrintComError(e);
}
CoUninitialize();
}
void PrintProviderError(_ConnectionPtr pConnection)
{
ErrorPtr pErr = NULL;
if( (pConnection
>Errors
>Count) >
)
{
long nCount = pConnection
>Errors
>Count;
// Collection ranges from
to nCount
for(long i =
;i < nCount;i++)
{
pErr = pConnection
>Errors
>GetItem(i);
CString strError;
strError
Format(
Error number: %x %s
pErr
>Number
pErr
>Description);
AfxMessageBox(strError);
}
}
}
void PrintComError(_com_error &e)
{
_bstr_t bstrSource(e
Source());
_bstr_t bstrDescription(e
Description());
// Print COM errors
CString strError;
strError
Format(
Error number: Description = %s Code meaning = %s
(LPCSTR) bstrDescription
e
ErrorMessage());
AfxMessageBox(strError);
}
调用方法
CString strFileName;
TCHAR FileName[MAX_PATH];
TCHAR bigBuff[
] = _T(
); // maximum common dialog buffer size
TCHAR szFilter[] = _T(
Text Files (*
mdb)|*
mdb|All Files (*
*)|*
*
);
CFileDialog dlg(TRUE
NULL
NULL
OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT
szFilter);
// Modify OPENFILENAME members directly to point to bigBuff
dlg
m_ofn
lpstrFile = bigBuff;
dlg
m_ofn
nMaxFile = sizeof(bigBuff);
if(IDOK == dlg
DoModal() )
{
strFileName = dlg
GetPathName();
lstrcpy(FileName
strFileName);
OpenSchemaX(FileName);
}(出处
风闪网路学院)
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠