先贴上主要的代码
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就出现错误了,