在MS-Access中,如何将从SELECT语句中检索到的行存储在一个数组中,并在一个消息框中显示多行:
Dim rSEL, rSUM, rDes As DAO.Recordset
Dim vItem_id, vQnty, vSum As Integer
Dim vDes As String
If Not IsNull(itemId) And Not IsNull(qnty_in) Then
If qnty_in <= 0 Or qnty_in > balance Or IsNull(balance) Then
Cancel = True
End If
Set rSEL = CurrentDb.OpenRecordset("SELECT item_id,item_qnty
FROM basketQnty_tbl WHERE basket_id=" & basketId)
'Check to see if the recordset actually contains rows
If Not (rSEL.EOF And rSEL.BOF) Then
rSEL.MoveFirst
Do Until rSEL.EOF
'Save itemId into a variable
vItem_id = rSEL!item_id
vQnty = (rSEL!item_qnty) * qnty_in
Set rSUM = CurrentDb.OpenRecordset("SELECT sum(qnty_in*qnty_type)
as QN FROM sales_tbl WHERE itemid=" & vItem_id)
Set rDes = CurrentDb.OpenRecordset("SELECT itemDesc
FROM items_main WHERE itemId=" & vItem_id)
vSum = rSUM!QN
vDes = rDes!itemDesc
'Move to the next record. Don't ever forget to do this.
If vQnty > vSum Then
MsgBox "you have only (" & vSum & " ) of Item (" & vDes & " ) in the stock"
Cancel = True
End If
rSEL.MoveNext
Loop
End If
rSEL.Close
End If
答案 0 :(得分:0)
无论如何,您在DAO和ADO中都知道GetRows
方法吗?你可以在你的情况下使用它。
yourarray = recordset.GetRows()
答案 1 :(得分:0)
我不会为此使用消息框,因为你可能有数百行,但它们并不适合。相反,我会创建一个带有ListBox的自定义表单,每当出现错误时,请执行以下操作:
If vQnty > vSum Then
<ErrorForm>.<ListBox>.AddItem("You have only (" & vSum & " ) of Item (" & vDes & " ) in the stock")
Cancel = True
End If
如果在循环结束时,取消= True,则显示ErrorForm。
另一件事 - 您可以创建一个查询,一次完成所有这些操作。您需要加入这三个表,并添加vQnty&gt; vSum条件。这将非常简洁,因为您可以将查询用作ListBox的源代码 - 无需代码。