2017-08-25 4 views
0

私は、支払い金額がチェックされた場合に選択された数の項目と等しいかそれ以上であるかどうかをチェックする関数を書いています。この例では、10個のチェックボックスがある項目があります。 1つ以上のボックスを任意の順序でチェックすることができます。アイテムが条件を満たす場合は、クリアされます。送信ボタンに複数の条件を使用してループする方法を教えてください。

processItem2については
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 

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

は今までこのような&ペーストコードをコピーしないでください。それはメンテナンスの悪夢です。

あなたは、実行時に自分の名前を連結することによって、オブジェクトをループすることができます

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

など

サイドノート:

With recordset 
    .MoveLast 
    .MoveFirst 

これらのMoveLast /にMoveFirstコマンドは不要です。レコードセットの正しい.RecordCountを取得したい場合にのみ必要です。

+0

また、私の知る限り、「更新可能」とは、実際のレコードではなく_Recordset_を指します。 – Gustav

+0

これらの観測のためにアンドレに感謝します。提供された例に基づいて( "txtSalesItem"&i)どこにどのように挿入するかをもっと明示することをお勧めします。 –

+0

@ LibertyCrownInfotech:自分で試してください。 'txtSalesItem1'や' DispQty1'のようなフィールド名/コントロール名がある場合は、これを行います。別の注記:番号付きのフィールドを別のテーブル "Today_Sales"に変換し、それをサブフォームに変更すると、全体がより簡単になります。次に、動的な名前を構築せずにレコードをループするだけです。 – Andre

関連する問題