关于ADO操作数据表的修改
我现在想对一个表数据进行修改,我的界面上有一个Grid控件, 里面总共有16*128个数据,我现在想保存Grid中的数据,用以下语句操作:
for (int i = 1; i < m_GridCtrl.GetRowCount(); i++)
{
for (int j = 1; j < m_GridCtrl.GetColumnCount(); j++)
{
strTemp = m_GridCtrl.GetItemText(i, j);
strTemp.Remove(' ');
if ( bFlag )
{
ptrRecordset->AddNew();
ptrRecordset->Fields->GetItem(_variant_t("ZID"))->Value = short((i - 1) * 16 + (j - 1));
ptrRecordset->Fields->GetItem(_variant_t("TYPE"))->Value = _bstr_t(strTemp);
ptrRecordset->Update();
}
else
{
ptrRecordset->Fields->GetItem(_variant_t("ZID"))->Value = short((i - 1) * 16 + (j - 1));
ptrRecordset->Fields->GetItem(_variant_t("TYPE"))->Value = _bstr_t(strTemp);
ptrRecordset->Update();
ptrRecordset->MoveNext();
}
}
}
但是发现在修改状态的时候速度很慢,要等好几秒,可能是我写的方法不对,所以想请教一下,有什么简单快速的方法???
问题点数:20、回复次数:6Top
1 楼bohut(●伯虎● )回复于 2005-06-06 15:21:14 得分 0
可以将字段的值先取出,然后拼成sql语句,一次执行insert语句Top
2 楼miladuo(辞职ing)回复于 2005-06-06 15:38:49 得分 0
楼上说的有道理,用SQL语句。Top
3 楼icegirl914(冰儿)回复于 2005-06-06 15:51:27 得分 0
if ( bFlag )
strSql.Format("INSERT INTO YCTRANSMIT0(ZID, TYPE) VALUES(%d, '%s') ",(i-1)*16+(j-1),
strTemp);
else
strSql.Format("UPDATE YCTRANSMIT0 SET TYPE = '%s' WHERE ZID = %d ",strTemp,(i-1)*16+
(j-1));
ptrRecordset->Open((_bstr_t)strSql, theApp.m_pConnection.GetInterfacePtr(),
adOpenDynamic, adLockOptimistic, adCmdText);
我试了这个,但是Open语句出错了,没找到原因在那里
Top
4 楼bohut(●伯虎● )回复于 2005-06-06 16:00:06 得分 10
try
catchTop
5 楼junhuang09()回复于 2005-06-06 16:01:29 得分 10
把
ptrRecordset->Open((_bstr_t)strSql, theApp.m_pConnection.GetInterfacePtr(),
adOpenDynamic, adLockOptimistic, adCmdText);
换成
m_pConnection.Execute(_bstr_t(strSql), NULL, adOptionUnspecified);
再试试看Top
6 楼bohut(●伯虎● )回复于 2005-06-06 16:09:08 得分 0
ptrRecordset->Open((LPTSTR)sql.GetBuffer(255),_variant_t((IDispatch *) (theApp.m_pConnection),true),
adOpenDynamic,adLockPessimistic,adCmdText);Top




