|
楼主 |
发表于 2009-6-24 19:00
|
显示全部楼层
原帖由 sunsoncheng 于 2009-6-24 08:27 发表
后面的SAVE好象是不重要的!
正如楼主讲的,其实内存中已处理了,SAVE只是给人看一下而已
现在的问题是这段:
在客户机端的recordset上调用update方法,若使用批更新,则被修改的记录中的改动将保存到缓冲区中, ...
按你的要求做了一个示例。压缩包里做了一个示例数据库备份(Sql Server2000),数据库名为lbpp,内有一个表jb,由gh,xm,jb三个字段组成。
示例中 RstSave2File 从数据库中读取数据保存到文件UpdateDbTest中
ReadFile_UpdateDB中将打开UpdateDbTest文件,然后新增一条记录,然后建立连接后更新数据库。
- Const sSAVE_FILE_NAME As String = "\UpdateDbTest"
- Const sHOST As String = "localhost"
- Const sDB_NAME As String = "lbpp"
- Const sUSER_NAME As String = "sa"
- Const sPASSWORD As String = "!@#lbpp"
- Sub RstSave2File()
- Dim cn As ADODB.Connection
- Dim sSqlCommand As String
- sSqlCommand = "select * from jb"
- '建立连接
- Call ConnectDB(cn, SQL_Server, sHOST, sDB_NAME, sUSER_NAME, sPASSWORD)
- Dim rs As ADODB.Recordset
- Set rs = New ADODB.Recordset
- rs.CursorLocation = adUseClient
-
- rs.Open sSqlCommand, cn, adOpenStatic, adLockBatchOptimistic
- rs.Save ThisWorkbook.Path & sSAVE_FILE_NAME
- Set rs.ActiveConnection = Nothing
-
- Call CloseConnect(cn)
- rs.Close
- Set rs = Nothing
- End Sub
- Sub ReadFile_UpdateDB()
- Dim cn As ADODB.Connection
- Dim rs As ADODB.Recordset
- Set rs = New ADODB.Recordset
- With rs
- .Open ThisWorkbook.Path & sSAVE_FILE_NAME, , adOpenStatic, adLockBatchOptimistic, adCmdFile
- .AddNew Array("gh", "xm", "jb"), Array("3456", "李四", 100.38)
- .Update
- Call ConnectDB(cn, SQL_Server, sHOST, sDB_NAME, sUSER_NAME, sPASSWORD)
- '=============== 恢复连接 ================
- rs.ActiveConnection = cn
- rs.UpdateBatch
-
-
- .Close
- End With
- Set rs = Nothing
- End Sub
复制代码
由于没有看到你的代码,找不到具体原因,我的想法是,你新增记录不成功是不是因为你找开的recordset中的记录是来自多张表的,如果那样的话,我想应该是不能新增记录的,这就是在SQL中直接做也是不行的。方便的话把你的代码发一个给我看看,可以发到我邮箱中 litbearpp@gmail.com。 |
|