動態建構查詢、匯出工具或通用編輯器時,需在執行期取得資料表所有欄位名稱。本文示範 ADO Fields 集合遍歷取得欄位名稱並填入 CListBox。
IDC_SHOWFIELDS, "顯示欄位") 與 ListBox (IDC_LIST_FIELDS)FTI.mdb,含資料表 Images
// stdafx.h
#import "c:\program files\common files\system\ado\msado15.dll" \
no_namespace rename("EOF", "adoEOF")
// App::InitInstance
AfxOleInit();
// Dialog 建構函數
m_pConnection.CreateInstance(__uuidof(Connection));
try {
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\FTI.mdb", "", "", adModeUnknown);
}
catch (_com_error& e) { AfxMessageBox(_T("資料庫連接失敗!")); }
m_pRecordset.CreateInstance(__uuidof(Recordset));
void CGetFieldNameDlg::OnButtonShowFields()
{
m_FieldsList.ResetContent();
_bstr_t sql = "SELECT * FROM Images";
m_pRecordset->Open(sql,
m_pConnection.GetInterfacePtr(),
adOpenDynamic, adLockOptimistic, adCmdText);
Fields* pFields = NULL;
HRESULT hr = m_pRecordset->get_Fields(&pFields);
if (FAILED(hr)) return;
long nCount = 0;
pFields->get_Count(&nCount);
for (long i = 0; i < nCount; ++i) {
Field* pField = NULL;
pFields->get_Item(_variant_t(i), &pField);
if (pField) {
BSTR bstrName = NULL;
pField->get_Name(&bstrName);
if (bstrName) {
m_FieldsList.AddString(CString(bstrName));
SysFreeString(bstrName);
}
pField->Release();
}
}
pFields->Release();
}

get_Fields 取得集合指標,記得 Release_variant_t(i) 傳遞get_Name 回傳 BSTR,使用完須 SysFreeString完整 Dialog 專案原始碼,含錯誤處理與資源清理。