Access数据库,在ADDNEW后,无法执行UPDATA或MOVELAST的问题

woshixiaocaomei 2011-12-28 11:29:41
先贴上主要的代码



CString s_str[] = {"FIELD1","FIELD2","FIELD3","FIELD4","FIELD5",
"FIELD6","FIELD7","FIELD8","FIELD9","FIELD10",
"FIELD11","FIELD12","FIELD13","FIELD14","FIELD15",
"FIELD16"};

CString strTime;
CTime t = CTime::GetCurrentTime();
pRecordData->RecordTime = t;
strTime.Format("%d",t);

//当数据库为空,就新建一行
if(m_pRecordset->BOF&&m_pRecordset->adoEOF)
{
m_pRecordset->AddNew();
stnDataFiled = 0;
m_pRecordset->PutCollect("TIMEINDEX",_variant_t(strTime));
m_pRecordset->PutCollect("DATEINDEX",_variant_t(t.Format("%Y-%m-%d")));

}

for(int nAddrIndex =1; nAddrIndex <= 2; nAddrIndex++)
{
pRecordData->MeterAddress = nAddrIndex;
pRecordData->AlarmIndex = 0;//报警功能
for(int nChannelIndex = 0;nChannelIndex < 4;nChannelIndex++)
{


pRecordData->PresentValue = float(m_nCurPV[nChannelIndex][nAddrIndex])/(float)10.0;
pRecordData->ChannelCode = nChannelIndex + 1;

//数据存储单元序号(0~15小于数据单元数16
//nfiledamout为每行最大的存储各数=16
if(stnDataFiled >= nfiledamount)
{
m_pRecordset->AddNew();
stnDataFiled = 0;
m_pRecordset->PutCollect("TIMEINDEX",_variant_t(strTime));
m_pRecordset->PutCollect("DATEINDEX",_variant_t(t.Format("%Y-%m-d")));

}


//数据库内存储数据的格式
//数据记录时间,仪表地址,通道号,实时数据,报警序号
strData.Format("%d,%d,%d,%g,%d",
pRecordData->RecordTime,
pRecordData->MeterAddress,
pRecordData->ChannelCode,
pRecordData->PresentValue,
pRecordData->AlarmIndex);

m_pRecordset->PutCollect(_variant_t(s_str[stnDataFiled]),_variant_t(strData));

stnDataFiled++;
}
}
}


if(!(m_pRecordset->BOF && m_pRecordset->adoEOF))// 这里出错,当第一行还未写满,不用换行时,不会出错
{ //当第1行满,if(stnDataFiled >= nfiledamount).ADDNEW()后再次写入数据,就出错
m_pRecordset->Update();
}
delete pRecordData;
m_pRecordset->Close();
m_pRecordset.Release();
m_pRecordset = NULL;

if(m_pConnection->State)
m_pConnection->Close();
m_pConnection= NULL;
bResult = TRUE;

return bResult;





上面是详细的代码,主要是想数据库写入 时间,仪表地址,通道号,实时数据,报警序 格式的数据

每次写入为8个数据, 每一行能存放16个

现在前2次写入,然后调用UPDATA,数据都能正常写入

由于当数据大于16个时,需要行换继续写入,用ADDNEW()增一行.然后到再写入后,调用UPDATA就出现错误了,



...全文
168 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyx100 2011-12-30
  • 打赏
  • 举报
回复
记住:AddNew()和Update()是成对使用的,你一次添加一条记录,
把数据库需要赋值的都要PutCollect,不要一次条件多条记录!
zhongguoren666 2011-12-30
  • 打赏
  • 举报
回复
强烈建议对于数据的增加、修改、删除不要用ADO自带那那ADDNew 呀什么的去控制。
要用SQL增控制。这是最好的,而且对于后续的扩展、维护都是有帮助的。

VC对ADO操作的例子在我的BLOG里有:

http://blog.csdn.net/zhongguoren666/article/details/6701403
这个是我在正式上线环境下用的。绝对可用的。

sdl2005lyx 2011-12-30
  • 打赏
  • 举报
回复
代码很乱,怎么有多处m_pRecordset->AddNew()!

记住:AddNew()和Update()是成对使用的,你一次添加一条记录,
把数据库需要赋值的都要PutCollect,不要一次条件多条记录!
zyq5945 2011-12-29
  • 打赏
  • 举报
回复
加异常捕获看是什么错误
try
{
//你的ADO代码
}
catch (_com_error& e)
{
CString strMsg;
strMsg.Format(_T("错误描述:%s\n错误消息%s",
(LPCTSTR)e.Description(),
(LPCTSTR)e.ErrorMessage());
AfxMessageBox(strMsg);
}
shn521 2011-12-29
  • 打赏
  • 举报
回复
access数据库里设置主键了吗

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧