C++ 从access数据库中获取多列数据

当access数据库中有多张表时每张表有多列数据时,怎么从中获取每一列的数据已经能实现和access数据库的连接,就差怎么获取多表数据和多列数据了???急求?????... 当access数据库中有多张表时
每张表有多列数据时,怎么从中获取每一列的数据
已经能实现和access数据库的连接,就差怎么获取多表数据和多列数据了???

急求?????
展开
 我来答
来自月岩仪态万千的比目鱼
2013-07-19 · TA获得超过1571个赞
知道小有建树答主
回答量:1221
采纳率:50%
帮助的人:974万
展开全部
——16.遍历数据库中所有表名:
m_pRecordset =m_pConnect->OpenSchema(adSchemaTables);
while(!(m_pRecordset ->adoEOF))
{
    _bstr_t tblname =m_pRecordset->Fields->GetItem("TABLE_NAME")->Value;//获取表格
        _bstr_t tbltype =m_pRecordset->Fields->GetItem("TABLE_TYPE")->Value;//获取表格类型
        if (!strcmp(tbltype ,"TABLE")) //这里可以对表格类型进行判断,判断后即可处理tblname
   {
        AfxMessageBox(tblname);//显示表名
        }     
        m_pRecordset->MoveNext();
}
m_pRecordset->Close();

——12.读取表内字段&得到字段个数
try
         {
                   myAccess.OnInitADOConn();//连接到数据库
                   myAccess.m_pRecordset.CreateInstance("ADODB.Recordset");
                   myAccess.m_pRecordset->Open("SELECT*FROMb_CollectData",myAccess.m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
         }
         catch(_com_errore)
         {
                   CString errormessage;
                   errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
                   AfxMessageBox(errormessage);///显示错误信息         return FALSE;
                   return;
         }
         CString   strColName; 
         BSTR      bstrColName; 
         long      ColCount,i;  
         Field*   field = NULL;   
         HRESULT   hr; 
         Fields*  fields = NULL; 
         LPCTSTR   nameField; 
         hr= myAccess.m_pRecordset->get_Fields (&fields);  //得到记录集的字段集合   
         if(SUCCEEDED(hr))      
                   fields->get_Count(&ColCount);  //得到字段总个数
         for(i=1;i<ColCount;i++)    
         {
                   fields->Item[i]->get_Name(&bstrColName);//得到记录集中的字段名
                   strColName=bstrColName;   
                   nameField= strColName;   
                   m_ListBoxAllField.AddString(nameField);//ListBox控件
         }    
         if(SUCCEEDED(hr))  
                   fields->Release();//释放指针
       ——4.读取表内数据。将表内数据全部读出并显示在列表框内,m_AccessList为列表框的成员变量名。如果没有遇到表结束标志adoEOF,则用GetCollect(字段名)或m_pRecordset->Fields->GetItem(字段名)->Value方法,来获取当前记录指针所指的字段值,然后再用MoveNext()方法移动到下一条记录位置。代码如下所示: 
1.知道字段名:
         try
         {
                   _variant_tvar;
                   CStringstrName,strAge;
 
                   myAccess.OnInitADOConn();//连接到数据库
                   myAccess.m_pRecordset.CreateInstance("ADODB.Recordset");
                   myAccess.m_pRecordset->Open("SELECT* FROMtb_Users",myAccess.m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
                   
                   if(!myAccess.m_pRecordset->BOF)
                            myAccess.m_pRecordset->MoveFirst();
                   else
                   {
                   //      AfxMessageBox("表内数据为空");
                            return;
                   }
                   //读入库中各字段并加入列表框中
                            while(!myAccess.m_pRecordset->adoEOF)
                   {
                            var= myAccess.m_pRecordset->GetCollect("strName");
                            if(var.vt!= VT_NULL)
                            {
                                     strName= (LPCSTR)_bstr_t(var);
                                     m_vName.push_back(strName);
                            }
                            var= myAccess.m_pRecordset->GetCollect("PassWord");
                            if(var.vt!= VT_NULL)
                            {
                                     strMiMa= (LPCSTR)_bstr_t(var);
                                     m_vMiMa.push_back(strMiMa);
                            }
                            myAccess.m_pRecordset->MoveNext();
                   }
 
                   //默认列表指向第一项,同时移动记录指针并显示
                   m_AccessList.SetCurSel(0);
         }
         catch(_com_errore)
         {
                   CString errormessage;
                   errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
                   AfxMessageBox(errormessage);///显示错误信息         return FALSE;
                   return;
         }   
         myAccess.m_pRecordset->Close();
 
2.不知道字段名:
void CUp2Lower::ShowData2List() //显示表内数据
{
         _variant_tvar;
         CStringstrtmp;
         CStringsql = "select *from ";
         sql+= m_SelTableName;
         _bstr_t   StrSQL = sql; 
         try
         {
                   myAccess.OnInitADOConn();//连接到数据库
                   myAccess.m_pRecordset.CreateInstance("ADODB.Recordset");         
                  myAccess.m_pRecordset->Open(StrSQL,myAccess.m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
                   if(!myAccess.m_pRecordset->BOF)
                   myAccess.m_pRecordset->MoveFirst();
                   else
                   {
                            //      AfxMessageBox("表内数据为空");
                            myAccess.m_pRecordset->Close();
                            return;
                   }
                   intn = g_vAllField.size();//列数(字段总数)
                   intj =0;//行数
                   while(!myAccess.m_pRecordset->adoEOF)//行,是否有数据
                   {
                            intnRow = m_ListShow.InsertItem( j ,"无用字符串"); //插入行
                            j++;
                            for(int i=0;i<n;i++)//向列中插入数据
                            {
                                     CStringsr = g_vAllField[i];
                                     var= myAccess.m_pRecordset->GetCollect((_variant_t)sr);
                                     if(var.vt!= VT_NULL)
                                     {
                                               strtmp= (LPCSTR)_bstr_t(var);
                                               m_ListShow.SetItemText(nRow,i,strtmp );//设置数据  nRow行, i列,strtmp为显示内容
                                     }
                            }
                            myAccess.m_pRecordset->MoveNext();
                   }
         }
         catch(_com_errore)
         {
                   CString errormessage;
                   errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
                   AfxMessageBox(errormessage);///显示错误信息         return FALSE;
                   return;
         }  
         myAccess.m_pRecordset->Close();
}
枝以游1179
2013-07-19 · 贡献了超过341个回答
知道答主
回答量:341
采纳率:0%
帮助的人:107万
展开全部
以往的回答都是说在默认值里设置,这种方法在还没有输入记录的时候确实是一个好方法,但是若已经输入了记录(特别是已输入了不少的记录)的话,此方法就行不通了,在此我有一个方法可供你们参考一下(特别是对输入了不少的记录更会觉得方便):1.在“查询”中设计一个“更新查询”在查询设计器中8406把要修改的表显示出来在下面的字段栏中选择要修改或添加的字段名ko在“更新到”栏中输入1,并保存查询。2. 执行查询,在资料表中的相应栏位即可得到所需要的值。此方法即简便又实用(特别是对已输入较多的记录而言),并且执行一次后即可将该查询删除。
追问
?我用的是程序实现啊!什么查询设计器?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式