代码之家  ›  专栏  ›  技术社区  ›  DGM

我可以用事务包装访问表单吗?

  •  2
  • DGM  · 技术社区  · 16 年前

    3 回复  |  直到 16 年前
        1
  •  3
  •   Tony Toews    16 年前

    无法使用绑定表单完成。您可以使用临时表存储数据,然后更新主表。有点混乱,但我过去也这么做过。

    TempTables.MDB page at my website 这说明了如何在应用程序中使用临时MDB。

        2
  •  1
  •   Carlos    15 年前

    是的,可以这样做,以您需要的形式控制交易使用此代码:

    Private Sub Form_Open(Cancel As Integer)
        Set Me.Recordset = CurrentDb.OpenRecordset("NAME_OF_YOUR_TABLE_OR_QUERY")
    End Sub
    

    之后,可以使用DBEngine控制事务。

    它对我有用(我使用Access 2007)

        3
  •  0
  •   Andrius Solopovas    11 年前

    我已经弄明白了把它放在装订好的表格上是可能的。在任何父控件的更改事件中,分配包含ID号的变量所需的一切。然后,您需要将该ID值传输到子表单连接字段,并在主表单和子表单上执行事务。下面是我如何做到这一点的例子。

    Primary Form VBA
    
    Option Compare Database
    Option Explicit
    
    Private boolFrmDirty As Boolean
    Private boolFrmSaved As Boolean
    
    Private Sub EmpolyeesID_Change()
    Dim ordID As Integer
    Dim subFormOrdID As Object
    
    Set subFormOrdID = Forms!Order.OrderInstallation.Form!OrderID
    
    ordID = Me.Form!OrderID
    
    subFormOrdID.DefaultValue = ordID
    
    End Sub
    
    Private Sub Form_AfterDelConfirm(Status As Integer)
        If Me.Saved = False Then Me.Saved = (Status = acDeleteOK)
    End Sub
    Private Sub Form_AfterUpdate()
        Me.Saved = True
    End Sub
    Private Sub Form_Delete(Cancel As Integer)
        If Me.Dirtied = False Then DBEngine.BeginTrans
        Me.Dirtied = True
    End Sub
    'Check if form has got new values in it
    Private Sub Form_Dirty(Cancel As Integer)
        If Me.Dirtied = False Then DBEngine.BeginTrans
        Me.Dirtied = True
    End Sub
    'Open Form as a Record Set and set the variables for it
    Private Sub Form_Open(Cancel As Integer)
        Dim db As DAO.Database
        Dim rs As DAO.Recordset
        Set db = CurrentDb
        Set rs = db.OpenRecordset("SELECT * FROM Orders", dbOpenDynaset, dbAppendOnly)
        Set Me.Recordset = rs
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
        Dim msg As Integer
        If Me.Saved Then
            msg = MsgBox("Do you want to commit all changes?", vbYesNoCancel)
            Select Case msg
                Case vbYes
                    DBEngine.CommitTrans
                Case vbNo
                    DBEngine.Rollback
                Case vbCancel
                    Cancel = True
            End Select
        Else
            If Me.Dirtied Then DBEngine.Rollback
        End If
    End Sub
    
    Public Property Get Dirtied() As Boolean
        Dirtied = boolFrmDirty
    End Property
    
    Public Property Let Dirtied(boolFrmDirtyIn As Boolean)
        boolFrmDirty = boolFrmDirtyIn
    End Property
    
    Public Property Get Saved() As Boolean
        Saved = boolFrmSaved
    End Property
    
    Public Property Let Saved(boolFrmSavedIn As Boolean)
        boolFrmSaved = boolFrmSavedIn
    End Property
    
    Private Sub ProductID_AfterUpdate()
    'Calculations of VAT and Floor Price
    Dim clcVAT As Integer
    Dim sqlQry As String
    Dim instID As Integer
    
    instID = Me.Form!ProductID.Value
    
    sqlQry = "SELECT Products.Price FROM Products WHERE Products.ProductID =" & instID & ""
    
    Me.flPrice.RowSource = sqlQry
    
    End Sub
    
    Sub Form VBA 
    
    Option Compare Database
    Option Explicit
    'Transaction for sub-form
    Private Sub Form_Open(Cancel As Integer)
        Dim db As DAO.Database
        Dim rs As DAO.Recordset
        Set db = CurrentDb
        Set rs = db.OpenRecordset("SELECT * FROM OrderInstallation")
        Set Me.Recordset = rs
    End Sub
    Private Sub Form_AfterUpdate()
        Dim emplID As Object
        Dim cstmID As Object
        Dim prdcID As Object
        Dim DataArray As Variant
        Dim RqrdFieldErorr As String
        Dim qry As String
    
        Set emplID = Me.Parent!EmpolyeesID
        Set cstmID = Me.Parent!CustomerID
        Set prdcID = Me.Parent!ProductID
    
        If IsNull(emplID.Value) Or IsNull(cstmID.Value) Or IsNull(prdcID.Value) Then
            MsgBox ("Please enter select required fields first")
    
            Else
        End If
    End Sub
    'Restrict updates of Installation subform if Employee, Customer and Product is not selected
    Private Sub InstallationID_AfterUpdate()
        Dim instID As Integer
        Dim instPrice As Integer
        Dim strQry As String
    
        ' Create query based on InstallationID value
        instID = InstallationID.Value
        strQry = "SELECT Installation.Price, Installation.InstallationID FROM Installation WHERE Installation.InstallationID =" & instID & ""
        Me.Price.RowSource = strQry
    End Sub
    
    推荐文章
    ajq88  ·  删除子窗体记录
    12 年前