【问题标题】:Display multiple validation messages to the user向用户显示多个验证消息
【发布时间】:2013-04-03 09:12:43
【问题描述】:

在 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

【问题讨论】:

  • 为什么要将返回的记录存储在数组中?
  • 我想显示一个消息框,说你没有足够数量的列出的项目
  • 您不需要数组来从记录集中取出数据并显示在消息框中。
  • 先生。 @MarkBertenshaw我知道我可以为每条记录显示masgebox ...当我单击确定时它显示...另一个消息框但我想显示一个消息框,它在一个消息框中显示所有选定的记录
  • 我在阅读问题一段时间后猜到了。一般来说,永远不要将消息框放入循环中,除非您要立即退出循环。无论如何,我已经回答了下面的问题。

标签: arrays vba ms-access vb6 ms-access-2007


【解决方案1】:

你知道 DAO 和 ADO 中的GetRows 方法吗?你可以在你的情况下使用它。

yourarray = recordset.GetRows()

【讨论】:

    【解决方案2】:

    我不会为此使用消息框,因为您可能有数百行,而且它们不会都适合。相反,我会创建一个带有 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 的源 - 无需代码。

    【讨论】:

    • 我想显示消息框,说用户没有足够的所选项目,并在一个消息框中显示这些项目
    • @user1364008 在您给出的代码示例中,没有“选定项”的概念。您有一个购物篮 ID,并且购物篮包含项目。您能否更改您的问题以反映您想要做什么?现在太模棱两可了。
    • 我想将所选项目包含在一个数组中,然后我想在消息框中显示它
       If vQnty &gt; vSum Then ArrX=array(vsum,vdes) 'MsgBox "you库存中只有 (" &amp; vSum &amp; " ) 项 (" &amp; vDes &amp; " )" Cancel = True End If rSEL.MoveNext Loop msgbox ArrX 
    • 如果您有 100 个项目未通过此验证怎么办?您将无法全部看到它们,并且消息框会填满整个屏幕!
    猜你喜欢
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    相关资源
    最近更新 更多