如何使用多个条件循环提交按钮?

时间:2017-08-25 08:51:40

标签: sql ms-access dao

我正在编写一个函数,用于检查付款金额是否等于或等于选中的多个项目(如果已选中)。对于此示例,有10个项目,其中包含10个复选框。我可以按任何顺序检查一个或多个方框。如果一个或多个项目满足条件,它将被清除,否则它将保留。

Public Sub processItem1()

Dim db As DAO.Database
Dim pr As DAO.Recordset, so As DAO.Recordset
Dim strSQL1 As String
Dim strSQL2 As String

Set db = CurrentDb

    strSQL1 = "SELECT * FROM PharmSales WHERE PharmSalesID= (SELECT MAX(PharmSalesID) FROM PharmSales WHERE HospitalNo='" & Me.txtRegNo & "' And TDate = #" &    Format(Me.txtTDate, "M\/dd\/yyyy") & "# AND SalesItem1 = '" & Me.txtSalesItem1 & "')"
    strSQL2 = "SELECT * FROM tblItem WHERE ItemName = '" & Me.txtSalesItem1 & "'"
Set pr = db.OpenRecordset(strSQL1)
Set so = db.OpenRecordset(strSQL2)

With pr
If Not .BOF And Not .EOF Then  'Ensure that the recordset contains records
.MoveLast
.MoveFirst
 If .Updatable Then  'To ensure record is not locked by another user
 .Edit  'Must start an update with the edit statement
 ![DispQty1] = Nz(![DispQty1] + Me.txtSalesQty1.Value, 0)
  .Update
End If
End If

 pr.Close  'Make sure you close the recordset..
 Set pr = Nothing  '...and set it to nothing
Set db = Nothing
End With

With so
If Not .BOF And Not .EOF Then  'Ensure that the recordset contains records
.MoveLast
.MoveFirst
 If .Updatable Then  'To ensure record is not locked by another user
 .Edit  'Must start an update with the edit statement
![Stock_Out] = Nz(![Stock_Out] + Me.txtSalesQty1.Value, Me.txtSalesQty1.Value)
 ![SO_Date] = Me.txtTDate
  ![Stock_In] = Nz(![Stock_In] + 0, 0)
  .Update  'And finally we will need to confirm the update

End If
End If
 so.Close  'Make sure you close the recordset..
 ExitSub:
 Set so = Nothing  '...and set it to nothing
Set db = Nothing

   End With
    End Sub

对于processItem2:

Public Sub processItem2()

Dim db As DAO.Database
Dim pr As DAO.Recordset, so As DAO.Recordset
Dim strSQL1 As String
Dim strSQL2 As String

Set db = CurrentDb

    strSQL1 = "SELECT * FROM PharmSales WHERE PharmSalesID= (SELECT MAX(PharmSalesID) FROM PharmSales WHERE HospitalNo='" & Me.txtRegNo & "' And TDate = #" & Format(Me.txtTDate, "M\/dd\/yyyy") & "# AND SalesItem2 = '" & Me.txtSalesItem2 & "')"
    strSQL2 = "SELECT * FROM tblItem WHERE ItemName = '" & Me.txtSalesItem2 & "'"
Set pr = db.OpenRecordset(strSQL1)
Set so = db.OpenRecordset(strSQL2)

With pr
If Not .BOF And Not .EOF Then  'Ensure that the recordset contains records
.MoveLast
.MoveFirst
 If .Updatable Then  'To ensure record is not locked by another user
 .Edit  'Must start an update with the edit statement
 ![DispQty2] = Nz(![DispQty2] + Me.txtSalesQty2.Value, 0)
  .Update
End If
End If

 pr.Close  'Make sure you close the recordset..
 Set pr = Nothing  '...and set it to nothing
Set db = Nothing
End With

With so
If Not .BOF And Not .EOF Then  'Ensure that the recordset contains records
.MoveLast
.MoveFirst
 If .Updatable Then  'To ensure record is not locked by another user
 .Edit  'Must start an update with the edit statement
 ![Stock_Out] = Nz(![Stock_Out] + Me.txtSalesQty2.Value, Me.txtSalesQty2.Value)
 ![SO_Date] = Me.txtTDate
  ![Stock_In] = Nz(![Stock_In] + 0, 0)
  .Update  'And finally we will need to confirm the update
End If
End If
 so.Close  'Make sure you close the recordset..
 ExitSub:
 Set so = Nothing  '...and set it to nothing
Set db = Nothing

End With
End Sub

image

1 个答案:

答案 0 :(得分:1)

不要像这样复制和粘贴代码。这是一场维护噩梦。

您可以通过在运行时连接其名称来循环对象:

Me("txtSalesItem" & i)      ' form control
pr("DispQty" & i).Value     ' recordset field

旁注:

With recordset
    .MoveLast
    .MoveFirst

这些MoveLast / MoveFirst命令是不必要的。如果您想获得正确的.RecordCount记录集,则只需要它们。