如何得到access里面的所有表格名称?

2shcm 2004-11-21 01:32:19
如何用ADO得到access里面的所有表格名称!哪个写个具体示例好吗?最好是在对话框上实现的那种!谢谢了!
...全文
160 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
2shcm 2004-11-22
  • 打赏
  • 举报
回复
多谢大家!我今天花了几个小时反复检查原代码。终于解决!谢谢各位! 特别是laiyiling的提示!
2shcm 2004-11-21
  • 打赏
  • 举报
回复
先谢谢你们的回答,但我还是不懂。因为刚接触vc和ADO,请大家多多耐心的帮助。^_^。
“laiyiling” 你给我的程序能判断一个表应该具体怎么用?
“oyljerry” OpenSchema()的遍历具体怎么做?
“alon21” 说的ADOX具体怎么实现,我怎么找到的都是在vb上实现的?

你们那为能给个编译好的用对话框实现的工程给我好吗?好让我慢慢学习你们的经验。
我的e-mail:safechina@msn.com

谢谢!
alon21 2004-11-21
  • 打赏
  • 举报
回复
你找找ADOX方面的资料.
oyljerry 2004-11-21
  • 打赏
  • 举报
回复
OpenSchema()打开表,遍历,如楼上
Kudeet 2004-11-21
  • 打赏
  • 举报
回复
下面是我的运行过的一段代码,能判断一个表是否存在,参考里面就可以啦!

祝你成功!

bool CMainFrame::IsHaveTable(_ConnectionPtr pConnection, CString strTableName)
{
_RecordsetPtr pRstSchema = NULL;//数据库表指针
bool bIsHaveNo = FALSE;//是否有表?默认无表

//pConnection:指向数据库
pRstSchema = pConnection->OpenSchema(adSchemaTables);//指向所有的表

while(!(pRstSchema->EndOfFile))//指针是否已经指向最后一条记录?
{
_bstr_t table_name = pRstSchema->Fields->GetItem("TABLE_NAME")->Value;//得到表的名称

if(strTableName == (LPCSTR) table_name)//表名判断是否相同?
{
bIsHaveNo = TRUE;//有表了
break;
}
pRstSchema->MoveNext();
}
return bIsHaveNo;
}
2shcm 2004-11-21
  • 打赏
  • 举报
回复
嘿嘿,我运气不好,编译成功但运行失败!。运行第二个事例时没有成功。在执行下面一个句子时错误!
m_recordSet = m_connection->OpenSchema (adSchemaTables,vtMissing,vtMissing);
请问为什么?
Kudeet 2004-11-21
  • 打赏
  • 举报
回复
///This is a sample in MSDN
///here , m_tablesList is a listbox
/// goog luck!
_bstr_t tablesNames;
CString kooky;
m_tablesList.ResetContent();
UpdateData( TRUE);
try
{
m_recordSet = m_connection->OpenSchema (adSchemaTables,vtMissing,vtMissing);
while ( !m_recordSet->EOF )
{
tablesNames = m_recordSet->Fields->Item[L"TABLE_NAME"]->Value;
kooky = (char*) tablesNames;
if (kooky.Left(4) != "MSys")
m_tablesList.AddString( kooky );
m_recordSet->MoveNext();

}
}
catch(...) {}
UpdateData( FALSE );
m_recordSet = NULL;
Kudeet 2004-11-21
  • 打赏
  • 举报
回复
odbc遍历求数据库中表名:
bool CDBInfoDlg::ListTables(bool bViews, bool bSystemTables)
{
CDatabase database;
CString type = "'TABLE'";
int ret= -1;
HSTMT hStmt;
UCHAR szName[256];
SDWORD cbName;
CString names;
if( bViews )
type += ", 'VIEW'";//视图
if( bSystemTables )
type += ", 'SYSTEM TABLE'";//系统表
try{
if( !database.Open(m_strDSN) )
return false;
}
catch(...)
{
AfxMessageBox("Unable To Obtain Table Information");
return false;
}
SQLAllocStmt(database.m_hdbc,&hStmt);
ret = SQLTables(hStmt, NULL,SQL_NTS,
NULL,SQL_NTS,
NULL,SQL_NTS,
(unsigned char *)type.GetBuffer(0),SQL_NTS);
if(ret == SQL_ERROR)
{
SQLFreeStmt(hStmt,SQL_CLOSE);
database.Close();
if(ret == SQL_INVALID_HANDLE )
{
AfxMessageBox("Invalid handle");
return false;
}
AfxMessageBox("Database Could Not be Open");
return false;
}
m_cmbTables.ResetContent();
while(1){
ret = SQLFetch(hStmt);
if(ret == SQL_NO_DATA_FOUND)
break;
ret = SQLGetData(hStmt,3,SQL_C_CHAR,szName,TABLE_NAME_LENGTH, &cbName);
names.Format("%s",szName);
m_cmbTables.AddString(names); //这里把所有的表名添加到了一个控件里显示
}

m_cmbTables.SetCurSel(0);

SQLFreeStmt(hStmt,SQL_CLOSE);
database.Close();

ShowTable();

return true;
}

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧