现在的位置: 首页 > 综合 > 正文

获得表的字段并将内容写入XML文件中

2013年04月24日 ⁄ 综合 ⁄ 共 1935字 ⁄ 字号 评论关闭

带的毕业设计所需实现的功能。很简单,实现起来却花了一点功夫:

获得表字段之后将字段存放在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;
 } 

抱歉!评论已关闭.