Option Compare Database Option Explicit Private Sub Form_Load() On Error GoTo ErrorHandler Dim strSQL As String Dim cnn As Object 'ADODB.Connection Dim rst As Object 'ADODB.Recordset Dim rstTmp As Object 'DAO.Recordset ApplyTheme Me CurrentDb.Execute "DELETE FROM [TMP_tblAppraisal]" If IsNull(Me.OpenArgs) Then Me.DataEntry = True End If If Me.DataEntry Then Me.sfrDetail.Requery Exit Sub End If Me.btnSave.Enabled = Me.AllowEdits Set cnn = CurrentProject.Connection strSQL = "SELECT * FROM [tblContract] WHERE [xsID]=" & Nz(Me.OpenArgs, 0) Set rst = OpenADORecordset(strSQL, , cnn) Me![xsID] = rst![xsID] Me![salesCode] = rst![salesCode] Me![Export] = rst![Export] rst.Close strSQL = "SELECT * FROM [tblAppraisal] WHERE [xsID]=" & Nz(Me![xsID], 0) Set rst = OpenADORecordset(strSQL, , cnn) Set rstTmp = CurrentDb.OpenRecordset("TMP_tblAppraisal") Do Until rst.EOF rstTmp.AddNew rstTmp![AppraisalID] = rst![AppraisalID] rstTmp![xsID] = rst![xsID] rstTmp![AppraisalCode] = rst![AppraisalCode] rstTmp![ApproveDate] = rst![ApproveDate] rstTmp.Update rst.MoveNext Loop rst.Close rstTmp.Close Me.sfrDetail.Requery ExitHere: Set rst = Nothing Set cnn = Nothing Set rstTmp = Nothing Exit Sub ErrorHandler: RDPErrorHandler Me.Name & ": Sub Form_Load()" Resume ExitHere End Sub Private Sub btnSave_Click() On Error GoTo ErrorHandler Dim strWhere As String Dim strSQL As String Dim cnn As Object 'ADODB.Connection Dim rst As Object 'ADODB.Recordset Dim rstTmp As Object 'DAO.Recordset Dim blnTransBegin As Boolean If Not CheckRequired(Me) Then Exit Sub If Not CheckTextLength(Me) Then Exit Sub If Not CheckRequired(Me.sfrDetail) Then Exit Sub strWhere = "[xsID]<>" & Nz(Me![xsID], 0) & " AND [xsID]=" & Nz(Me![xsID], 0) If DCount("*", "tblContract", strWhere) > 0 Then MsgBoxEx "【xsID】已存在,不允许重复录入。", vbCritical Exit Sub End If Set cnn = CurrentProject.Connection cnn.BeginTrans blnTransBegin = True strSQL = "SELECT * FROM [tblContract] WHERE [xsID]=" & Nz(Me![xsID], 0) Set rst = OpenADORecordset(strSQL, adLockOptimistic, cnn) If rst.EOF Then rst.AddNew End If rst![salesCode] = Me![salesCode] rst![Export] = Me![Export] rst.Update Me![xsID] = rst![xsID] rst.Close cnn.Execute "DELETE FROM [tblAppraisal] WHERE [xsID]=" & Nz(Me![xsID], 0) strSQL = "SELECT * FROM [tblAppraisal] WHERE [xsID]=" & Nz(Me![xsID], 0) Set rst = OpenADORecordset(strSQL, adLockOptimistic, cnn) Set rstTmp = CurrentDb.OpenRecordset("TMP_tblAppraisal") Do Until rstTmp.EOF rst.AddNew rst![xsID] = rstTmp![xsID] rst![AppraisalCode] = rstTmp![AppraisalCode] rst![ApproveDate] = rstTmp![ApproveDate] rst.Update rstTmp.MoveNext Loop rst.Close rstTmp.Close cnn.CommitTrans Form_frmContractAppraisal.RefreshDataList MsgBoxEx "保存成功!", vbInformation ' If Me.DataEntry Then ' ClearControlValues Me ' CurrentDb.Execute "DELETE FROM [TMP_tblAppraisal]" ' Me.sfrDetail.Requery ' Else ' DoCmd.Close acForm, Me.Name, acSaveNo ' End If ExitHere: Set rst = Nothing Set cnn = Nothing Set rstTmp = Nothing Exit Sub ErrorHandler: If blnTransBegin Then cnn.RollbackTrans blnTransBegin = False End If RDPErrorHandler Me.Name & ": Sub btnSave_Click()" Resume ExitHere End Sub