-1

在 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
4

2 回答 2

0

我不会为此使用消息框,因为您可能有数百行,而且它们并不都适合。相反,我会创建一个带有 ListBox 的自定义表单,并且每当出现错误时,请执行以下操作:

If vQnty > vSum Then
    <ErrorForm>.<ListBox>.AddItem("You have only (" & vSum & " ) of Item (" & vDes & " ) in the stock")
    Cancel = True
End If

如果在循环结束时,Cancel = True,则显示 ErrorForm。

另一件事 - 您可以创建一个查询,它可以一次性完成所有这些。您需要连接三个表,并添加 vQnty > vSum 条件。这将非常简洁,因为您可以将查询用作 ListBox 的源 - 无需代码。

于 2013-04-11T10:05:57.333 回答
0

无论如何,您知道GetRowsDAO 和 ADO 中的方法吗?你可以在你的情况下使用它。

yourarray = recordset.GetRows()
于 2013-04-11T09:42:54.153 回答