带的毕业设计所需实现的功能。很简单,实现起来却花了一点功夫:
获得表字段之后将字段存放在Vector容器中,通过遍历获得每一行记录的值,所获得的值存放在另外一个Vector中,容器是个好东西,以前用的map和set比较多一点,而vector在动态分配的N元数组上具有很大的优势!
ofstream os("TestOut.txt");
vector<string> strVct,sVItem;
typedef vector<string>::iterator vct_it;
typedef vector<string>::size_type sz_tp;
HRESULT hr;
_bstr_t mStrSQL;
// _variant_t var,vnmae; ///////////////
// string sTemp; ///////////////
CString strColName; //////////////
string sNode,sTemp;
BSTR bstrColName;
long ColCount,i;
Field* field = NULL;
Fields* fields = NULL;
LPCTSTR nameField;
// 打开记录集,得到字段名,并将字段名信息添加到ListBox中
mStrSQL = "SELECT * FROM Images";
m_pRecordset->Open(mStrSQL,
m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
hr = m_pRecordset->get_Fields(&fields); // 得到记录集的字段集和
if(SUCCEEDED(hr))
fields->get_Count(&ColCount);
m_FieldsList.ResetContent();
// 得到记录集的字段集合中的字段的总个数
for(i = 0; i < ColCount; i++)
{
fields->Item[i]->get_Name(&bstrColName); // 得到记录集中的字段名
strColName = bstrColName;
nameField = strColName;
m_FieldsList.AddString(nameField);
strVct.push_back(strColName.GetBuffer(0));
}
if(SUCCEEDED(hr))
fields->Release(); // 释放指针
// 关闭记录集
// m_pRecordset->Close();
if(!m_pRecordset->BOF)
m_pRecordset->MoveFirst();
while(!m_pRecordset->adoEOF)
{
vct_it it=strVct.begin();
// string sNode;
for(;it!=strVct.end();++it)
{
// string sTemp=*it;
sTemp=*it;
CString str=sTemp.c_str();
_variant_t vnmae=(_variant_t)str;
_variant_t var = m_pRecordset->GetCollect(vnmae);
CString strName;
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);
sNode+=strName.GetBuffer(0);
sNode+=" ";
sTemp.erase(0,sTemp.size());
}
sVItem.push_back(sNode);
sNode.erase(0,sNode.size());
m_pRecordset->MoveNext();
}
m_pRecordset->Close();
// vct_it n_it=sVItem.begin();
os<<sVItem.size()<<endl;
for(vector<string>::size_type iNumber=0;iNumber!=sVItem.size();++iNumber)
{
os<<iNumber<<sVItem[iNumber].c_str()<<endl;
}