0

所以我有一个列表框,显示使用选择 sql 查询在 Order 表中输入的所有订单。现在我还想添加从列表框中编辑项目的功能,我看到右键单击编辑列表项选项,但是当我单击它时,它只是打开表单但不填充字段。该表单具有未绑定的文本框,但我无法弄清楚如何根据右键单击的条目来填充它们。我还尝试从 vba 打开目标表单并使用以下代码通过 vba 填充字段

Private Sub editrecordbttn_Click()
Dim valSelect As Variant
Dim v As Variant
Dim selector As Variant
Dim strValue As String ' just used for the demonstration
Dim splitvalue() As String
Dim selectedsampid As String
Dim selectedcusid As String
Dim Records As DAO.Recordset
Dim SQLcus As String
Dim SQLsamp As String
 
For Each valSelect In Me.searchlistbox.ItemsSelected
    strValue = strValue & "" & Me.searchlistbox.ItemData(valSelect) & "," & "" & Me.searchlistbox.Column(1, valSelect) & ","
Next valSelect
 
    ' to remove trailing comma
strValue = Left(strValue, Len(strValue) - 1)

splitvalue() = Split(strValue, ",")
selectedsampid = splitvalue(0)
selectedcusid = splitvalue(1)

DoCmd.OpenForm ("Add Sample")
Forms![Add Sample].fnametxt.SetFocus


'query and fill cus info
SQLcus = "SELECT * FROM CustomerInfo WHERE CusID = '" & selectedcusid & "';"
Set Records = CurrentDb.OpenRecordset(SQLcus)
Me!clienttypetxt = Records![Client type].Value

    

结束子

4

1 回答 1

0

好的,假设我们有一个列表框,我们这样做:

假定列表框的第一列是行的 PK 或“ID”。

所以,我们有这个:

在此处输入图像描述

因此,您选择一行,然后单击按钮。

按钮代码如下所示:

Private Sub cmdEdit_Click()

  Debug.Print "Hotel list id selected = " & Me.HotelList
  
  DoCmd.OpenForm "frmEditHotels", , , "ID = " & Me.HotelList
  
  
End Sub

因此,在大多数情况下,为了获得更好的用户体验,按照上述方式处理可能会更好。

当然,在这种情况下,您使用不是来自数据库的值的“列表”填充列表框(或组合)。在这种情况下,您可以使用“编辑”列表选项。这允许您指定一个表单(或使用内置编辑器)。

所以,如果这不是您输入的列表,并且来自数据库,那么不要尝试使用内置的“列表编辑”

(添加一个类似上面的按钮,并使用“where”子句启动表单,以将表单加载到 ONE 数据记录中,就像我在上面所做的那样。

因为哦,很多时候,一个列表框数据将来自一个表,那么编辑列表选项并没有太多特别的用途。并且使用表格(而不是列表)来填充+驱动组合/列表框是一个更好的设计,无论如何也是一个想法。如果您想要多个用户,情况尤其如此,因为“列表”编辑功能意味着并建议每个编辑列表的用户现在将拥有自己的列表,而不是使用每个人都可以编辑的表格。

此外,没有理由使用循环来填充该列表框。我们可以完成这个:

' setup critera for listbox.

Dim strSQL     As String

' prompt user for Hotel city - we just hard code for this exmaple.

Dim strCity    As String

strCity = "Banff"

strSQL = "SELECT ID,FirstName, LastName, City,HotelName FROM tblHotels " & _
        "WHERE City = '" & strCity & "' " & "ORDER BY HotelName"
        
Me.HotelList.RowSource = strSQL

注意我们没有一些 MESSAY 值列表,但可以将数据 (sql) 直接推送到列表框。我们不仅没有循环,而且我们也不必担心大小限制。

使用“值列表”(那些凌乱的分隔“;”列表),那么你有一个相当小的 4,000 个字符的限制。不要占用很多较大的行来“炸毁”列表框,因为它不能处理很多行。

其实我还是经常建议你使用向导来构建列表框,你可以选择一个数据源(sql),或者MUCH的出租人选择“值列表”。

价值清单只有在您说了几个选择,例如先生,夫人或什么不是时,它是一个不错的选择,而且它不是一些大桌子,而只能说 5-10 个选择。

有更大的吗?使用数据表驱动的列表框,避免使用值列表。

于 2021-11-01T17:05:18.983 回答