在 Ms Access 中设置最大 ID 条件 SQL

Setting Max ID criteria in Ms Access SQL

这个查询没有运行开头。有人可以帮忙看看有什么问题吗? 如果有任何其他方法可以实现这一点,请提出建议。

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

    Set pr = db.OpenRecordset(strSQL1)

    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
     If IsNull(![TotalPaid]) = True And Me.txtGrand_TotalPay.Value >= Me.txtSalesAmt1.Value Then
     ![DispQty1] = Nz(![DispQty1] + Me.txtSalesQty1.Value, 0)
      .Update
           ElseIf IsNull(![TotalPaid]) = False And (Me.txtGrand_TotalPay.Value - Me.txtSalesAmt1.Value) >= (txtGrand_TotalFee - Me.txtGrand_TotalPay.Value + Me.txtSalesAmt1.Value) Then
     ![DispQty1] = Nz(![DispQty1] + Me.txtSalesQty1.Value, 0)
      .Update

     Else: MsgBox ("Insufficient balance!")
     End If
    End If
    End If

     pr.Close 
     Set pr = Nothing 
    Set db = Nothing
    End With

End Sub

您的 SQL 检查多个条件,但您的子查询没有任何这些条件,因此它可能 select 一条不符合您其他条件的记录,导致您记录集始终为空。

您需要将这些条件添加到子查询,而不是主查询。 由于子查询只会 return 一条记录,因此您不必将它们都添加到两者中。

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 & "')"