编辑列表框项目

Editing listbox item

所以我有一个列表框,显示使用 select sql 查询在订单 table 中输入的所有订单。现在我还想添加从列表框中编辑项目的功能,我看到右键单击编辑列表项目选项但是当我单击它时,它只会打开表单但不会填充字段。该表单具有未绑定的文本框,但我无法弄清楚如何根据右键单击的条目填充它们。我还尝试从 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

    

结束子

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

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

所以,我们有这个:

这样你就select一行,然后点击按钮。

按钮代码如下所示:

Private Sub cmdEdit_Click()

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

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

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

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

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

既然很多时候,一个列表框的数据会来自于一个table,那么编辑列表选项就没有什么特别的用处了。使用 table(而不是列表)来填充 + 驱动 combo/listbox 是一个更好的设计,无论如何也是一个想法。 如果您想要多个用户,情况尤其如此,因为“列表”编辑功能意味着并建议编辑列表的每个用户现在都有自己的列表,而不是使用每个人都可以编辑的 table .

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

' 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),也可以选择“值列表”。

值列表只是一个不错的选择,如果你说了几个选项,比如 Mr.,Mrs. 之类的,而且它不是一些大的 table,但只能说 5-10 个选项。

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