【发布时间】:2023-03-09 05:25:01
【问题描述】:
我正在尝试在打开表单时使用OpenArgs 来定位记录。记录没有重复。该代码一直有效,直到记录包含双引号。
OpenArgs 在使用关闭一个表单时设置
Private Sub EditBtn_Click()
Dim CurrentProd As String
CurrentProd = Me.ProductName
DoCmd.Close acForm, "ProductsFrm"
DoCmd.OpenForm "ProductEditFrm", OpenArgs:=CurrentProd
End Sub
当新表单打开时,加载事件包含
Private Sub Form_load()
Dim ProdSrch As String
If Nz(Me.OpenArgs, 0) <> 0 Then
ProdSrch = Replace(Me.OpenArgs, """", """""")
Me.ProductName.SetFocus
DoCmd.FindRecord ProdSrch
End If
End Sub
替换函数将诸如“Chocolate Torte 8”Rich with Chocolate Ganache”之类的字符串更改为 Chocolate Torte 8”“Rich with Chocolate Ganache”。我发现的其他帮助建议这应该被解释为将两个双引号视为单引号而不是分隔符的指令,但是,Access 找不到记录。
即使我输入确切的文本并使其等于字符串变量,如下所示,Access 也不会找到记录
Private Sub Form_load()
Dim ProdSrch As String
If Nz(Me.OpenArgs, 0) <> 0 Then
ProdSrch = "Chocolate Torte 8"" Rich with Chocolate Ganache"
Me.ProductName.SetFocus
DoCmd.FindRecord ProdSrch
End If
End Sub
或者这个
Private Sub Form_load()
Dim ProdSrch As String
If Nz(Me.OpenArgs, 0) <> 0 Then
ProdSrch = "Chocolate Torte 8" & Chr(34) & " Rich with Chocolate Ganache"
Me.ProductName.SetFocus
DoCmd.FindRecord ProdSrch
End If
End Sub
没有错误,Access 将我带到第一条记录。
我使用recordsetclone 以另一种方式解决了这个问题。
将Openargs 更改为主键唯一编号而不是文本字符串。第二种形式中包含主键的文本框已将“启用”设置为“否”,因此 setfocus 不起作用。
Private Sub Form_load()
Dim Rst As Recordset
Dim ProdSrch As String
If Nz(Me.OpenArgs, "") <> "" Then
ProdSrch = "[ProductID] = " & Me.OpenArgs
Set Rst = Me.RecordsetClone
Rst.FindFirst ProdSrch
Me.Bookmark = Rst.Bookmark
Rst.Close
End If
End Sub
我最初应该使用主键而不是名称来查找记录,在 VBA 中将文本框从 enabled = true 更改为 false。那应该简单得多。但是尝试过这种方法后,我想知道我缺少什么
顺便说一下,如果我单步执行我得到的代码
运行时错误编号 2046 弹出“命令或操作“FindRecord”现在不可用。
如果我不单步执行,这不会弹出。
【问题讨论】: