一条简单的语句:m_pRecordset->PutCollect()就会使EXCEL文件增大一倍多,并且重新打开EXCEL后,出现“文件错误:数据可能丢失”的错误提示,点确定后,EXCEL里面的数据还在,并且完好,保存后,文件体积又变小了, 但是问题来了,再用ADO连接EXCEL就连不上了,错误提示:
CADORecordset ErrorCode = 80040e10Code meaning = IDispatch error #3088 Source = Microsoft JET Database Engine
Description = No value given for one or more required parameters.网上找了很多相关文章,大多数也都碰到过我这样的问题,但就是没找到合适的解决办法。各位请帮帮忙, 分不够再加……
CADORecordset ErrorCode = 80040e10Code meaning = IDispatch error #3088 Source = Microsoft JET Database Engine
Description = No value given for one or more required parameters.网上找了很多相关文章,大多数也都碰到过我这样的问题,但就是没找到合适的解决办法。各位请帮帮忙, 分不够再加……
==================================================
字段名称是否写错了?或者字段类型非文本,而写入的值是文本的?多贴点代码,大家一起找错。
{
_variant_t var;
int nTemp;
try
{
var = m_pRecordset->Fields->GetItem(vtFieldName)->GetValue(); switch(var.vt)
{
case VT_BSTR://字符串
case VT_LPSTR:
case VT_LPWSTR:
//strValue = (LPCTSTR)(_bstr_t)var;
var.bstrVal = strValue.AllocSysString();
//m_pRecordset->Fields->GetItem(vtFieldName)->Value = var;
break;
case VT_I1: //无符号字符
case VT_UI1:
//strValue.Format(_T("%d"),var.bVal);
nTemp = _tstoi(strValue);
var.bVal = (BYTE)nTemp;
//m_pRecordset->Fields->GetItem(vtFieldName)->Value = var;
break;
case VT_I2://短整型
//strValue.Format(_T("%d"),var.iVal);
nTemp = _tstoi(strValue);
var.iVal = (SHORT)nTemp;
break;
case VT_UI2://无符号短整型
//strValue.Format(_T("%d"),var.uiVal);
nTemp = _tstoi(strValue);
var.uiVal = (USHORT)nTemp;
break;
case VT_INT://整型
//strValue.Format(_T("%d"),var.intVal);
nTemp = _tstoi(strValue);
var.intVal = (INT)nTemp;
break;
case VT_I4://整型
case VT_I8://长整型
//strValue.Format(_T("%d"),var.lVal);
nTemp = _tstoi(strValue);
var.lVal = (LONG)nTemp;
break;
case VT_UINT://无符号整型
//strValue.Format(_T("%d"),var.uintVal);
nTemp = _tstoi(strValue);
var.uintVal = (UINT)nTemp;
break;
case VT_UI4://无符号整型
case VT_UI8://无符号长整型
//strValue.Format(_T("%d"),var.ulVal);
nTemp = _tstoi(strValue);
var.ulVal = (ULONG)nTemp;
break;
case VT_VOID:
//strValue.Format(_T("%8x"),var.byref);
break;
case VT_R4://浮点型
//strValue.Format(_T("%d"),(int)var.fltVal);
nTemp = _tstoi(strValue);
var.fltVal = (FLOAT)nTemp;
break;
case VT_R8://双精度型
//strValue.Format(_T("%d"),(int)var.dblVal);
nTemp = _tstoi(strValue);
var.dblVal = (DOUBLE)nTemp;
break;
case VT_DECIMAL://小数
//strValue.Format(_T("%d"),(int)var);
nTemp = _tstoi(strValue);
var = nTemp;
break;
case VT_CY:
{
//COleCurrency cy = var.cyVal;
//strValue = cy.Format();
var = (_variant_t)strValue;
var.ChangeType(VT_CY); }
break;
case VT_BLOB:
case VT_BLOB_OBJECT:
case 0X2011:
//strValue = "[BLOB]";
break;
case VT_BOOL://布尔型
//strValue = var.boolVal?_T("TRUE"):_T("FALSE");
break;
case VT_DATE://日期型
{
//DATE dt = var.date;
//COleDateTime da = COleDateTime(dt);
//strValue = da.Format(_T("%Y-%m-%d %H:%M:%s"));
}
break;
case VT_NULL://NULL值
//strValue = _T("");
var.vt = VT_BSTR;
var.bstrVal = strValue.AllocSysString();
break;
case VT_EMPTY://空
//strValue = _T("0");
break;
case VT_UNKNOWN://未知类型
//strValue = _T("UN_KNOWN");
break;
}
//strValue = strValue.Trim();
m_pRecordset->Fields->GetItem(vtFieldName)->Value = var;
return TRUE;
}
catch(_com_error &e)
{
// dump_com_error(e);
return FALSE;
}
}这是我写字段的代码,没有用m_pRecordset->PutCollect,但是同样会使EXCEL体积增大一倍多用m_pRecordset->PutCollect的效果一样,EXCEL同样被破坏
RsS_CONF.PutFieldValue((_variant_t)"AgentIP", strAgentIP);
RsS_CONF.PutFieldValue((_variant_t)"File Type", strFileType);
RsS_CONF.PutFieldValue((_variant_t)"Module Name", strModule);
RsS_CONF.PutFieldValue((_variant_t)"Name", strName);
RsS_CONF.PutFieldValue((_variant_t)"Path", strPath);
RsS_CONF.PutFieldValue((_variant_t)"Key Name", strKeyName);
RsS_CONF.PutFieldValue((_variant_t)"Value", strValue);
RsS_CONF.PutFieldValue((_variant_t)"Type", strType);
RsS_CONF.m_pRecordset->UpdateBatch(adAffectAll);
连接字符串一下两种都试过,结果都一样:adoinfo.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Extended Properties=Excel 8.0"), m_strExcelParamPath);
adoinfo.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\""), m_strExcelParamPath);
但是拿到没装EXCEL的中文本操作系统上用ADO操作后,或者拿到装了EXCEL的英文版操作系统上用ADO操作后,就会出现文件破坏的现象,并且EXCEL再也不能被ADO访问了
选中列,右键,"设置单元格格式","数字"属性页,"分类"是什么?
{
var = m_pRecordset->Fields->GetItem(vtFieldName)->GetValue();
==========================================
这一句去掉。
[email protected]
那我怎么能够判断var 的类型呢? 怎么给var 附上值呢?
RsS_CONF.PutFieldValue((_variant_t)"AgentIP", strAgentIP);
RsS_CONF.PutFieldValue((_variant_t)"File Type", strFileType);
RsS_CONF.PutFieldValue((_variant_t)"Module Name", strModule);
RsS_CONF.PutFieldValue((_variant_t)"Name", strName);
RsS_CONF.PutFieldValue((_variant_t)"Path", strPath);
RsS_CONF.PutFieldValue((_variant_t)"Key Name", strKeyName);
RsS_CONF.PutFieldValue((_variant_t)"Value", strValue);
RsS_CONF.PutFieldValue((_variant_t)"Type", strType);
RsS_CONF.m_pRecordset->UpdateBatch(adAffectAll);==========================
改成:
RsS_CONF.m_pRecordset->AddNew();
RsS_CONF.m_pRecordset->PutCollect((_variant_t)"AgentIP", strAgentIP);
RsS_CONF.m_pRecordset->PutCollect((_variant_t)"File Type", strFileType);
RsS_CONF.m_pRecordset->PutCollect((_variant_t)"Module Name", strModule);
RsS_CONF.m_pRecordset->PutCollect((_variant_t)"Name", strName);
RsS_CONF.m_pRecordset->PutCollect((_variant_t)"Path", strPath);
RsS_CONF.m_pRecordset->PutCollect((_variant_t)"Key Name", strKeyName);
RsS_CONF.m_pRecordset->PutCollect((_variant_t)"Value", strValue);
RsS_CONF.m_pRecordset->PutCollect((_variant_t)"Type",strType);
RsS_CONF.m_pRecordset->Update();
RsS_CONF.m_pRecordset->Close();不太清楚你的代码为什么一会
RsS_CONF.m_pRecordset
一会又直接RsS_CONF
http://download.csdn.net/source/398476 http://topic.csdn.net/t/20060309/09/4602265.html