连接Provider从msdasql 改为 sqloledb 后,保存记录集时出错
为了提高从外网连到内网的数据库的传输速度,我将连接方式从msdasql 改为 sqloledb 后,传输速度从原来的3k/s加快到30k/s,但保存记录集时出错错误:
出错信息:
row cannot be located for updating. some values may have been changed since it was last read.
我用原来的连接方式,程序已在局域网内运行了二年多,很正常,最近仓库搬到外面,需要从外网连到公司的数据库,才出现问题。并且,我新增采购单时,不会出错,只有更改保存过后的采购单时才出错。
保存的简要代码如下:
1. 首先删除记录集中所有的老记录
//M_FgRs 记录集
If M_FgRs.RecordCount > 0 Then
M_FgRs.MoveFirst
For i = 0 To M_FgRs.RecordCount - 1
M_FgRs.DELETE adAffectCurrent
M_FgRs.MoveNext
Next
End If
2.从MSHFlexGrid中添加编辑好的记录到记录集
//m_fg>>编辑数据的网格
//....
For i = m_fg.FixedRows To saveRows - 1
M_FgRs.addnew
For j = m_fg.FixedCols To m_fg.Cols - 1
//....
M_FgRs.Fields(j - m_fg.FixedCols).Value = m_fg.TextMatrix(i, j)
//....
Next
Next
3. 处理好记录集的记录后,提交更改到数据库
cn.BeginTrans
//....
//下面这句出错: 出错信息为:
//row cannot be located for updating.
some values may have been changed since it was last read.
M_FgRs.UpdateBatch adAffectAllChapters
//....
cn.CommitTrans
//....
4.连接字符串用我原来的:
cnsql = "DRIVER=SQL Server;SERVER=" & bserver & ";UID=" & buserid & ";PWD=" & bpassword & ";WSID=RECEPTION;DATABASE=" & bdataname & ";Network=DBMSSOCN;Address=" & bserver & "," & sqlPort
不出错,但从外网连接速度很慢
用您的连接字符串:
cnsql = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=" & buserid & ";Password=" & bpassword & ";Initial Catalog=" & bdataname & ";Data Source=" & bserver & "," & sqlPort
从外网连接速度较快,查询语句也正常但编辑数据时就出错了.
请指教。 谢谢。