Display multiple validation messages to the user

烈酒焚心 提交于 2019-12-01 13:34:21

问题


In MS-Access, how can I store the rows retrieved from my SELECT statement in an array, and show many rows in one messagebox:

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

回答1:


Anyway have you known GetRows method in both DAO and ADO? You may use it in your case.

yourarray = recordset.GetRows()



回答2:


I would not use a Message Box for this, since you could potentially have hundreds of rows, and they wouldn't all fit. Instead, I would create a custom form with a ListBox, and whenever you get the error, do the following:

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

If at the end of the loop, Cancel = True, display ErrorForm.

Another thing - you may be able to create a query which does all this in one go. You need to join the three tables, and add the vQnty > vSum condition. This would be pretty neat, because you could use the query as the source of the ListBox - no code required.



来源:https://stackoverflow.com/questions/15944305/display-multiple-validation-messages-to-the-user

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!