C++程序中运行得到的数据放入access数据库中

我通过VC++6.0建立了一个Win32 Console Application(空白工程)。编写了一个程序:读取文件内容得到数据,并将数据提取到暂存的结构体数组中。但是我现在想将数组中的这些数据放入Access数据库(.mdb)的一个已定义的表中。请问具体该如何操作(连接数据库,对数据库操作什么的)?列出详细代码和步骤最好。请勿复制粘贴(我已经看了一些博客内容,但是还没有懂)。悬赏分值后续我还可以加。

第1个回答  2017-09-29
可以用ADO来实现,这是ASP数据库部分的内容,你可以查一下有关的书,如果只是要建立连接的话,以下代码就建立并打开了一个连接和一个记录集
第2个回答  2017-09-29
——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();本回答被提问者和网友采纳