Office中国论坛/Access中国论坛

标题: 请教ADO批更新 [打印本页]

作者: accesscx    时间: 2010-8-4 09:29
标题: 请教ADO批更新
本帖最后由 accesscx 于 2010-8-4 09:33 编辑

库拆分为前后端,前端采用ADO+临表的方式,现已把需修改的2条记录下载并显示在子窗体_排期表内,

[attach]42973[/attach]
想实现:将pqid为186和131的备注修改为1,然后保存,

问题:只保存了其中一条记录的修改,应该怎么做才能全部保存?
[attach]42975[/attach]

现在的代码:
tcnndb的赋值:
Option Compare Database
Public tcnndb As ADODB.Connection
Function MJAutoExec_SysStartRun() '起动时,打开服务数据库Data的connection连接
On Error GoTo err_1

Set tcnndb = New ADODB.Connection
tcnndb.CursorLocation = adUseClient
tcnndb.Provider = "Microsoft.Jet.OLEDB.4.0"
tcnndb.Open "Data Source=" & "\\srv-lj-01\tooling_Data.mdb;Jet OLEDbataBase Password=123456"
err_2:
  Exit Function

err_1:
MsgBox err.Number & err.Description
Resume err_2
End Function


保存的代码:
Dim rst As Object
    If MsgBox("是否保存批量排期操作?", vbQuestion + vbYesNo, "保存提示") = vbYes Then
        Set rst = CreateObject("ADODB.Recordset")
        rst.CursorLocation = adUseClient
        rst.Open "排期表", tcnndb, adOpenKeyset, adLockBatchOptimistic, adCmdTable
        With Me.子窗体_排期表.Form.Recordset
            If .RecordCount > 0 Then .MoveFirst
            Do Until .EOF
                 rst.Filter = "pqid=" & !pqid & ""
                 If rst.RecordCount > 0 Then
                    rst!备注 = !备注
                    rst.Update
                End If
                .MoveNext
            Loop
            rst.UpdateBatch
        End With
        rst.Close
        MsgBox "保存成功!"
    Else
         GoTo err01
    End If



作者: todaynew    时间: 2010-8-4 10:19
我始终没有明白你为什么不将两表联接起来处理?
作者: 红尘如烟    时间: 2010-8-4 10:24
用事务试一下:
  1. Dim rst As Object
  2. Dim strSQL As String
  3. Dim lngAffected As Long

  4. If MsgBox("是否保存批量排期操作?", vbQuestion + vbYesNo, "保存提示") = vbYes Then
  5.     With Me.子窗体_排期表.Form.Recordset
  6.         If .RecordCount > 0 Then
  7.             tcnndb.BeginTrans
  8.             .MoveFirst
  9.             Do Until .EOF
  10.                 strSQL = "UPDATE 排期表 SET 预计加工日期=#" & !预计加工日期 & "#,预计完成日期=#" & !预计完成日期 & "#," & _
  11.                          "模号='" & !模号 & "',注塑机='" & !注塑机 & "',备注='" & !备注 & "' WHERE pqid=" & pqid
  12.                 tcnndb.Execute strSQL, lngAffected
  13.                 If lngAffected = 0 Then
  14.                     strSQL = "INSERT INTO 排期表(预计加工日期,预计完成日期,模号,注塑机,备注) " & _
  15.                              "VALUES(#" & !预计加工日期 & "#,#" & !预计完成日期 & "#,'" & !模号 & "','" & !注塑机 & "','" & !备注 & "')"
  16.                     tcnndb.Execute strSQL
  17.                 End If
  18.                 .MoveNext
  19.             Loop
  20.             tcnndb.CommitTrans
  21.             MsgBox "保存成功!"
  22.         End If
  23.     End With
  24. Else
  25.     GoSub err01
  26. End If
复制代码

作者: accesscx    时间: 2010-8-4 11:24
我始终没有明白你为什么不将两表联接起来处理?
todaynew 发表于 2010-8-4 10:19


将后台的排期表连接到前台?

我想不要连接表


作者: accesscx    时间: 2010-8-4 11:39
红尘老师,

事务处理更新成功,不过日期不能为空,如果5条记录里,只需要修改3条的日期就麻烦了

[attach]42980[/attach]



作者: todaynew    时间: 2010-8-4 15:42
用事务试一下:
红尘如烟 发表于 2010-8-4 10:24

不明白为何记录集与更新查询交替使用,直接用更新查询两三句不就完事了吗?






欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3