如题,我用下面的代码将字段的值保存到表lift中出错:if(rows > m_iSaveNum) //如果有数据未保存
{
CString* strListData;
strListData = new CString[columns]; //获得APP类的指针
CTacAnalysisApp *tacApp = (CTacAnalysisApp*)AfxGetApp();
if(FAILED(tacApp->m_pRst->Open("select * from lift", (_variant_t)tacApp->m_pConn, adOpenDynamic,
adLockOptimistic, adCmdText)))
{
MessageBox("打开数据库lift表失败");
tacApp->m_pRst.Release();
return;
} //MessageBox("ok");
for(int j=m_iSaveNum; j<rows; j++)
{
tacApp->m_pRst->MoveLast();
tacApp->m_pRst->AddNew();
for(int i=0; i<columns; i++)
{
//获取列表中的数据
strListData[i] = m_result_list.GetItemText(j, i); //将数据保存到数据库中
tacApp->m_pRst->PutCollect(_bstr_t(columnsTitle[i]), _variant_t(strListData[i]));
}
}
tacApp->m_pRst->Update();
}
m_iSaveNum = rows;
{
CString* strListData;
strListData = new CString[columns]; //获得APP类的指针
CTacAnalysisApp *tacApp = (CTacAnalysisApp*)AfxGetApp();
if(FAILED(tacApp->m_pRst->Open("select * from lift", (_variant_t)tacApp->m_pConn, adOpenDynamic,
adLockOptimistic, adCmdText)))
{
MessageBox("打开数据库lift表失败");
tacApp->m_pRst.Release();
return;
} //MessageBox("ok");
for(int j=m_iSaveNum; j<rows; j++)
{
tacApp->m_pRst->MoveLast();
tacApp->m_pRst->AddNew();
for(int i=0; i<columns; i++)
{
//获取列表中的数据
strListData[i] = m_result_list.GetItemText(j, i); //将数据保存到数据库中
tacApp->m_pRst->PutCollect(_bstr_t(columnsTitle[i]), _variant_t(strListData[i]));
}
}
tacApp->m_pRst->Update();
}
m_iSaveNum = rows;
解决方案 »
- 用自定义画圆的外边
- dbgrid控件使用:如何给dbgrid加入自动序号列?
- 高手求助!!
- 庆祝加入CSDN三周月, 散分!
- 为何我的CWebBrowser2控件浏览器老是Detecting proxy settings...,而不能进去浏览?
- 各位大侠,键盘是怎么才能锁住的,哎,这个问题挺严重!
- 我也不知道这个问题该在哪里问了,借宝地发发,兄弟姐妹们帮忙啊,、
- 用#pragma data_seg声明了一个共享数组,在程序中用LoadLibrary载入后,能否直接得到此数组的指针?
- 一个有关当前路径的问题!
- 如何编一个能得知系统是否安装了新硬件的程序???
- BSTR类型封装在结构中,用WriteFile和ReadFile写的时候遇到问题,想不到解决的办法。
- 请问如何获取数据库中的新增记录(由外部程序添加的)
{
MessageBox("打开数据库lift表失败");
tacApp->m_pRst.Release();
return;
}
if(FAILED(tacApp->m_pRst->Open("select * from lift", (_variant_t)tacApp->m_pConn, adOpenDynamic, adLockOptimistic, adCmdText)))
{
MessageBox("打开数据库lift表失败");
tacApp->m_pRst.Release();
return;
}
替换成
tacApp->m_pRst = tacApp->m_pConn->Execute("select * from lift", NULL, adCmdText);
可以通过,可是运行到
tacApp->m_pRst->MoveLast();
tacApp->m_pRst->AddNew();
都出错,
请教了,到底是怎样的错误?
tacApp->m_pRst是否有值?你怎么确定是这行错?单步了吗? 抱歉,由于涉及到视频操作,系统提示无法在调试模式下运行,我只能通过在不同的语句之后设置弹出对话框的方式来判断。
CoInitialize(NULL); m_pConn.CreateInstance("ADODB.Connection");
m_pRst.CreateInstance("ADODB.Recordset"); try
{
m_pConn->ConnectionString ="Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=tacData";
m_pConn->Open("","","",adConnectUnspecified);
}
catch(_com_error e)
{
AfxMessageBox("Connected is falied!");
return 0;
}
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
m_pConn->ConnectionString="DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost;\
DATABASE=USERS; USER=root; PASSWORD=123456;OPTION=3;";
你是否按的以上方式进行初始化的?CTacAnalysisApp *tacApp = (CTacAnalysisApp*)AfxGetApp();//确定你的tacApp是取到了
tacApp->m_pConn->Open("","","",adConnectUnspecified);
tacApp->m_pRst=tacApp->m_pConn->Execute("select * from lift",NULL,adCmdText);试试看这样
{
//tacApp->m_pRst->Open("select * from lift", (_variant_t)tacApp->m_pConn, adOpenDynamic, adLockOptimistic, adCmdText);
tacApp->m_pConn->Open("","","",adConnectUnspecified);
tacApp->m_pRst=tacApp->m_pConn->Execute("select * from lift",NULL,adCmdText); }
catch(_com_error &e)
{
AfxMessageBox("Connected is falied!");
tacApp->m_pRst.Release();
return;
}调试结果“Connected is falied!”,难道是我的tacApp没有取到?
这句已经是在App类的InitInstance()函数里啊
tacApp->m_pRst = tacApp->m_pConn->Execute("Select * from lift", NULL, adCmdText);
也可以啊,是不是与这个有关啊,我在那个类执行了之后再执行这个类的,没有关,是不是就不用在调用这句了?
tacApp->m_pRst = tacApp->m_pConn->Execute("Select * from lift", NULL, adCmdText);
的话,下面两句执行错误
tacApp->m_pRst->MoveLast();
tacApp->m_pRst->AddNew();
tacApp->m_pRst->MoveLast();
tacApp->m_pRst->AddNew();
的问题。
对于tacApp->m_pRst->AddNew(); 是否要求表要有主键?
继续请教
最后需要Update()、Close()和Release()。
还有就是AddNew并不需要MoveLast()
tacApp->m_pRst->MoveLast();
tacApp->m_pRst->AddNew();
任意一个函数都提示:Unknow error 0x800A0CB3请问这是什么错误?
{
tacApp->m_pRst->CursorLocation = adUseClient;
tacApp->m_pRst->Open("select * from lift where 1=1", _variant_t((IDispatch *)tacApp->m_pConn,true), adOpenStatic, adLockReadOnly, adCmdText);
}
catch(_com_error &e)
{
CString error;
error.Format("%s with open m_pRst in CResultTableDlg::OnSaveData()", e.ErrorMessage());
AfxMessageBox(e.ErrorMessage()); return;
}
这一段是在报错的语句之前,它没有报错,应该可以确定theapp取到了吧
真是郁闷啊英文提示:
Debugger detected - please close it down and restart!WinNT Users: Please note that having the WinIce/SoftIce service installed means that you are running a debugger!