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 Set cnn = CurrentProject.Connection cnn.BeginTrans blnTransBegin = True strSQL = "SELECT * FROM [KKmoveintbl-M] WHERE [moveinID]=" & SQLText(Me![moveinID]) Set rst = OpenADORecordset(strSQL, adLockOptimistic, cnn) If rst.EOF Then rst.AddNew rst![moveinID] = GetAutoNumber("moveinID") End If rst![ygID] = Me![ygID] rst![moveindate] = Me![moveindate] rst![stockID] = Me![stockID] rst![moveremark] = Me![moveremark] rst.Update Me![moveinID] = rst![moveinID] rst.Close cnn.Execute "DELETE FROM [KKmoveintbl-S] WHERE [moveinID]=" & SQLText(Me![moveinID]) strSQL = "SELECT * FROM [KKmoveintbl-S] WHERE [moveinID]=" & SQLText(Me![moveinID]) Set rst = OpenADORecordset(strSQL, adLockOptimistic, cnn) Set rstTmp = CurrentDb.OpenRecordset("TMP_KKmoveintbl-S") Do Until rstTmp.EOF rst.AddNew rst![moveinID] = Me![moveinID] rst![toolsID] = rstTmp![toolsID] rst![qtyin] = rstTmp![qtyin] rst.Update rstTmp.MoveNext Loop rst.Close rstTmp.Close cnn.CommitTrans Form_frmKKmoveintbl -M.RefreshDataList MsgBoxEx "±£´æ³É¹¦£¡", vbInformation ' If Me.DataEntry Then ' ClearControlValues Me ' CurrentDb.Execute "DELETE FROM [TMP_KKmoveintbl-S]" ' 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