ODBC,CDatabase,CRecordset [英] ODBC, CDatabase, CRecordset
本文介绍了ODBC,CDatabase,CRecordset的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
CDatabase db;
CRecordset rcd;
...
rcd.Open(CRecordset::forwardOnly, "SELECT * FROM [sheet1$]", CRecordset::readOnly);
...
在此示例中,假定表名称为"sheet1".但是当我不知道名字的时候,我怎么能得到它呢?
预先感谢.
In this example it''s assumed that the table name is "sheet1". But when I don''t know the name, how can I get it?
Thanks in advance.
推荐答案
",CRecordset :: readOnly); ...
", CRecordset::readOnly); ...
在此示例中,假定表名称为"sheet1".但是当我不知道名字的时候,我怎么能得到它呢?
预先感谢.
In this example it''s assumed that the table name is "sheet1". But when I don''t know the name, how can I get it?
Thanks in advance.
您可以使用SQLTables函数从数据库中获取表名列表.
You can get the list of table names from a database using the SQLTables function.
// Example code for a CDatabase derived class to read Excel files
// using the ODBC driver.
// Fill CStringArray with list of table names.
// System tables are Excel sheets (trailing dollar sign).
// Normal tables are named ranges (no trailing dollar sign).
bool CMyDatabase::GetSheetNames(CStringArray& arr) const
{
ASSERT(IsOpen());
SQLHSTMT hst = NULL;
SQLRETURN nSqlResult = ::SQLAllocHandle(SQL_HANDLE_STMT, m_hdbc, &hst);
if (!SQL_SUCCEEDED(nSqlResult))
TRACE1("Error %d in SQLAllocHandle()\n", nSqlResult);
else
{
nSqlResult = ::SQLTables(hst, NULL, 0, NULL, 0, NULL, 0, NULL, 0);
if (!SQL_SUCCEEDED(nSqlResult))
TRACE1("Error %d in SQLTables()\n", nSqlResult);
else
{
// Col 1, TABLE_CAT: File name
// Col 2, TABLE_SCHEM: Not used with Excel
// Col 3, TABLE_NAME: Table name
// Col 4, TABLE_TYPE: Table type (e.g. TABLE, SYSTEM TABLE)
// Col 5, REMARKS: Not used with Excel
// Max. sizes may be retrieved using SQLGetInfo().
// 64 for Excel ODBC driver
SQLTCHAR szName[64];
//SQLTCHAR szType[64];
SQLINTEGER cbName;
//SQLINTEGER cbType;
::SQLBindCol(hst, 3, SQL_C_TCHAR, szName, sizeof(szName), &cbName);
//::SQLBindCol(hst, 4, SQL_C_TCHAR, szType, sizeof(szType), &cbType);
while ((nSqlResult = ::SQLFetch(hst)) != SQL_NO_DATA)
{
if (SQL_SUCCEEDED(nSqlResult))
arr.Add(szName);
else // if (SQL_ERROR == nSqlResult)
{
TRACE1("Error %d fetching SQLTables\n", nSqlResult);
break;
}
}
}
::SQLFreeHandle(SQL_HANDLE_STMT, hst);
}
return SQL_NO_DATA == nSqlResult && arr.GetSize();
}
这篇关于ODBC,CDatabase,CRecordset的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文