对包含双引号的记录使用 FindRecord
Posted
技术标签:
【中文标题】对包含双引号的记录使用 FindRecord【英文标题】:Using FindRecord with records containing double quotes 【发布时间】:2020-07-22 21:57:29 【问题描述】:我正在尝试在打开表单时使用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”现在不可用。
如果我不单步执行,这不会弹出。
【问题讨论】:
【参考方案1】:数据中的撇号和引号是 SQL 语句或任何模仿 SQL 的 WHERE 子句(OpenForm/OpenReport 和域聚合函数的 WHERE 参数)的问题。 FindRecord 没有这个问题,因为它正在模拟“查找/替换”对话框。删除 Replace() 操作,您的原始代码应该可以工作。它对我有用。示例:DoCmd.OpenForm "Main", , , , , , Me.cbxProd
Private Sub Form_Load()
Me.tbxName.SetFocus
DoCmd.FindRecord Me.OpenArgs
End Sub
可以通过搜索数字 ID 字段来消除问题。
【讨论】:
删除了替换操作。仍然对我不起作用。你能发布对你有用的代码吗? 已编辑答案。也可以使用带有 ID 的 FindRecord。以上是关于对包含双引号的记录使用 FindRecord的主要内容,如果未能解决你的问题,请参考以下文章