如何动态获取表名?

DaeMaN 2004-09-20 09:53:45
小弟我现在要编一个数据库查询系统,用的数据库是Access,用ODBC方式连接。数据库中有四五十张表,以日期为表名,每张表中存储当日的测量数据。另外有一张表存放所有的表名。

请问如何通过用户的设置来动态的确定表名?
...全文
76 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
DaeMaN 2004-09-20
  • 打赏
  • 举报
回复
多谢laiyiling(壮志雄心) :)
Kudeet 2004-09-20
  • 打赏
  • 举报
回复
CString sql;
CString tablename;//假设这就是用户输入的表名,也就是你的动态表名
sql.Format("select * from %s",tablename); //根据你的输入表名来生成SQL语句。注意其中的空格符号,你可以用MessageBox(sql);来查看SQL语句是否为你要的。
DaeMaN 2004-09-20
  • 打赏
  • 举报
回复
对不起,可能我讲的不是很清楚。

我的意思是,通过用户的选择,已经能获得表名了,如何通过这个动态获得的表名来得到其中的数据?
Kudeet 2004-09-20
  • 打赏
  • 举报
回复
是要得到当前数据库的所有表名吗?
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,012

社区成员

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

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