我的访问数据库中有一个记录集,其中有一个名为“OperationDesc”的字段,该字段存储包含管道(“|”)字符的字符串。每当我使用 VBA SQL 方法搜索我的记录集以识别其中包含管道字符的特定字符串时 - 我收到错误 3077“表达式中垂直条的使用无效。
导致错误的部分是这样的:
Set dbs = CurrentDb
qr = "SELECT * FROM [A500Constants] ORDER BY [A500Constants].[ID];"
Set rs = dbs.OpenRecordset(qr)
qr = "[A500Constants].[ID] = " & Me.Controls("AddRoutDesc" & spot).Value
**rs.FindFirst qr**
If rs.Fields("ID") = 1 And Not rs.Fields("OperationDesc") = Me.Controls("AddRoutDesc" & CStr(spot)).Value Then
'If true at start of rs when not suppose to be - signifies new entry time
'if Me.Controls("AddRoutDesc" & CStr(Spot)).Value returned a description rather than ID the If would evaluate properly for the 1st item on the routing too
'beginning process of validating new operation data
当 Me.Controls("AddRoutDesc" & spot).Value 是一个包含 | 管道字符。
这是试图做什么: 有 n 个具有命名约定 AddRoutDesc0、AddRoutDesc1、.... 的组合框,从那里我允许用户输入她/他希望的任何文本。离开组合框后,我通过标题为“OperationDesc”的列搜索表/记录集,以查看之前是否使用过此描述。(我知道我目前正在搜索 ID - 我想搜索 OperationDesc 字段,因为它是允许用户同时输入新描述的唯一方法,因为多列组合框和列表属性的链接。)组合框填充了先前的描述以供选择,其中一些具有管道 | 特点。当我选择了这样的描述并离开运行上述内容的组合框时,就会出现此错误。如果有一些更简单的方法 - 我如何让 SQL 将管道视为字符串的另一部分,这将是完美的。
我目前已准备好以下代码,它可以搜索 | (或任何真正的东西)并用一些额外的分隔符和管道替换它,以使其不会在 SQL 中标记 w/e。
Private Function SQLStringFixer(InputString As String, ByVal FindString As String, ByVal ReplacementString As String, ByVal CompType As Integer) As String
If Not IsNull(InputString) Then
Dim WorkingStr As String
Dim Pntr As Integer
WorkingStr = InputString
Pntr = InStr(1, WorkingStr, FindString, CompType)
Do While Pntr > 0
WorkingStr = Left(CStr(WorkingStr), CLng(Pntr - 1)) & ReplacementString & Mid(WorkingStr, Pntr + Len(FindString))
Pntr = InStr(Pntr + Len(ReplacementString), WorkingStr, FindString, CompType)
Loop
SQLStringFixer = WorkingStr
Else
SQLStringFixer = ""
End If
End Function
Private Function FixStr4JetSQL(InputString As String) As String
Dim Temp As String
Temp = SQLStringFixer(InputString, "'", "''", vbBinaryCompare)
FixStr4JetSQL = SQLStringFixer(Temp, "|", "' & chr(124) & '", vbBinaryCompare)
End Function
我最终只需要知道哪些字符或字符集会让 SQL 中的查询看到 | 管道作为管道,而不是一些关键符号来做 w/e。如果有人知道这是什么——这将是一个很大的帮助——这样一件微不足道的事情已经花费了我很多时间。