我想通过recordset方式在已经成功连接的access数据库中增加新纪录,数据从编辑框输入,如果不成功提示错误信息。
然后弹出的messagebox显示我的错误是 类型不匹配。
bstr_t mStrSQL; mStrSQL = "SELECT * FROM Images "; //SQL语句
try
{
m_pRecordset->Open(mStrSQL,
m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);//打开记录集
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
// TODO: Add your control notification handler code here
try
{
// 添加新记录
m_pRecordset->AddNew();
m_pRecordset->PutCollect("Record_No", _variant_t((long)m_Record_No));
//m_Record_No是编辑框输入的变量,我定义的是int
m_pRecordset->PutCollect("year", _variant_t(m_year));
m_pRecordset->PutCollect("month", _variant_t(m_month));
m_pRecordset->PutCollect("date", _variant_t(m_date));
m_pRecordset->PutCollect("electricity", _variant_t(m_electricity));
m_pRecordset->PutCollect("gas", _variant_t(m_gas));
m_pRecordset->PutCollect("water", _variant_t(m_water));
m_pRecordset->PutCollect("commodity", _variant_t(m_commodity));
m_pRecordset->Update();
AfxMessageBox("插入成功!");
}
catch (_com_error e)
{
// 显示错误信息
CString errormessage;
errormessage.Format("添加记录失败!\r\n错误信息:%s", e.ErrorMessage());
AfxMessageBox(errormessage);
return;
}
// 关闭记录集
m_pRecordset->Close();
然后弹出的messagebox显示我的错误是 类型不匹配。
bstr_t mStrSQL; mStrSQL = "SELECT * FROM Images "; //SQL语句
try
{
m_pRecordset->Open(mStrSQL,
m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);//打开记录集
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
// TODO: Add your control notification handler code here
try
{
// 添加新记录
m_pRecordset->AddNew();
m_pRecordset->PutCollect("Record_No", _variant_t((long)m_Record_No));
//m_Record_No是编辑框输入的变量,我定义的是int
m_pRecordset->PutCollect("year", _variant_t(m_year));
m_pRecordset->PutCollect("month", _variant_t(m_month));
m_pRecordset->PutCollect("date", _variant_t(m_date));
m_pRecordset->PutCollect("electricity", _variant_t(m_electricity));
m_pRecordset->PutCollect("gas", _variant_t(m_gas));
m_pRecordset->PutCollect("water", _variant_t(m_water));
m_pRecordset->PutCollect("commodity", _variant_t(m_commodity));
m_pRecordset->Update();
AfxMessageBox("插入成功!");
}
catch (_com_error e)
{
// 显示错误信息
CString errormessage;
errormessage.Format("添加记录失败!\r\n错误信息:%s", e.ErrorMessage());
AfxMessageBox(errormessage);
return;
}
// 关闭记录集
m_pRecordset->Close();
其他的在VC中是Cstring型,在access中是 文本,
这个对应关系没有问题啊~
m_pRecordset->PutCollect("Record_No", _variant_t((long)m_Record_No));
ACCESS中的长整型 -》 VC中的int,不用再转换。
以前写得。看你有没有用。
CString strtemp;
strtemp.Format("insert into Data([CName], [PId]) values('%s','%s')", dlg.m_AddName, Pid);
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open((_bstr_t)(strtemp) ,
_variant_t((IDispatch* )theApp.m_pConnection, true),
adOpenStatic,
adLockOptimistic,
adCmdText);
m_pRecordset.Release();
m_pRecordset->Close(); 直接用sql语句比较好。给你参考
改成这样后,所有变量类型的问题都解决了 但是我使用updatedata(TRUE)刷新时程序报错debug assertation failed.
说是在afx.inl的第122行有错?
你程序中应该是个“保存”按钮,点击时先updatedata(TRUE),再把变量写入数据库。
在以下内容里,一定有名字写错什么的,请认真调试。
最后再仔细核对表的字段。m_pRecordset->PutCollect("Record_No", _variant_t((long)m_Record_No));
//m_Record_No是编辑框输入的变量,我定义的是int
m_pRecordset->PutCollect("year", _variant_t(m_year));
m_pRecordset->PutCollect("month", _variant_t(m_month));
m_pRecordset->PutCollect("date", _variant_t(m_date));
m_pRecordset->PutCollect("electricity", _variant_t(m_electricity));
m_pRecordset->PutCollect("gas", _variant_t(m_gas));
m_pRecordset->PutCollect("water", _variant_t(m_water));
m_pRecordset->PutCollect("commodity", _variant_t(m_commodity));