手头的项目,需要枚举数据库中的表然后让用户来选择,我是使用ADOX
1.获取表count
2.strTableName = (LPCTSTR)m_pCatalog->Tables->GetIte(nTableIndex)->GetName();获取表名字
可是这样做一个问题就是,枚举出来一大堆系统的表,如sql-server的系统信息表,请问各位高手怎么只枚举用户的表
急!
1.获取表count
2.strTableName = (LPCTSTR)m_pCatalog->Tables->GetIte(nTableIndex)->GetName();获取表名字
可是这样做一个问题就是,枚举出来一大堆系统的表,如sql-server的系统信息表,请问各位高手怎么只枚举用户的表
急!
_bstr_t table_name = pRstSchema->Fields->
GetItem("TABLE_NAME")->Value;//获取表的名称
if(m_strTType.CompareNoCase(_T("TABLE"))==0)
{
............
......
}你可以如上只取用户表,而过漓系统表等!
{
ASSERT(pConnection->State==adStateOpen);
_RecordsetPtr pRstSchema = NULL; SAFEARRAY FAR* psa = NULL;
SAFEARRAYBOUND rgsabound;
_variant_t var;
_variant_t Array;
rgsabound.lLbound = 0;
rgsabound.cElements = 4;
psa = SafeArrayCreate(VT_VARIANT, 1, &rgsabound);
var.vt = VT_EMPTY;
long ix;
ix = 0;
SafeArrayPutElement(psa, &ix, &var); ix= 1;
SafeArrayPutElement(psa, &ix, &var); ix = 2;
SafeArrayPutElement(psa, &ix, &var); var.vt = VT_BSTR;
//表的类型有"ALIAS""TABLE""SYNONYM""SYSTEM TABLE"
"VIEW""GLOBAL TEMPORARY""LOCAL TEMPORARY""SYSTEM VIEW"
var.bstrVal = bstrFilter;//这里bstrFilter="TABLE"就可以了 ix = 3;
SafeArrayPutElement(psa, &ix, &var);
var.vt=VT_EMPTY;
Array.vt = VT_ARRAY|VT_VARIANT;
Array.parray = psa; try
{
pRstSchema = pConnection->OpenSchema(adSchemaTables,&Array); *nTableCount=0;
while(!(pRstSchema->EndOfFile))
{
if(bstrTableNames!=NULL)
{
_bstr_t table_name = pRstSchema->Fields->
GetItem("TABLE_NAME")->Value;
*(bstrTableNames++)=table_name;
}
*nTableCount+=1;
pRstSchema->MoveNext();
}
}
catch (_com_error e) {
PrintComError(e);
} if(pRstSchema)
if (pRstSchema->State == adStateOpen)
pRstSchema->Close();
}