【问题标题】:SQL string dealing with "inch" marks处理“英寸”标记的 SQL 字符串
【发布时间】:2018-08-09 14:56:25
【问题描述】:

Microsoft Access 子表单过滤器输出如下所示:

**([qryPOExamDetail subform].[Line Description]="1"" CONDUIT - EMT")**

字段中的实际值为1" CONDUIT - EMT。我已将上述参数转换为[Line Description]='1"" CONDUIT - EMT',但动态查询返回零记录。

我已经构建了一个 SQL 语句来创建一个动态查询,以便通过 VBA doCmd.TransferText 函数导出到一个逗号分隔的文件。我过滤其他字段(没有“英寸”标记)并且效果很好。我已经在互联网上搜索了答案,但找不到任何东西。

如何让 SQL 识别 1"" CONDUIT - EMT = 1" CONDUIT - EMT?

以下是用于创建动态查询的 SQL 字符串:

strSQL1 = "SELECT tblOpenCommittment.[Job Number], tblOpenCommittment.[Job Name], tblOpenCommittment.[Order Number], tblOpenCommittment.[Supplier Name]," _
& "tblOpenCommittment.[Order Date],tblOpenCommittment.[Cost Code], tblOpenCommittment.[Line Description], tblOpenCommittment.Qty, tblOpenCommittment.Tax, " _
& "tblOpenCommittment.Price, tblOpenCommittment.Unit, tblOpenCommittment.[Total Line Value],tblOpenCommittment.[Total Line Value]-tblOpenCommittment.[Line Total Amount invoiced]" _
& "AS [Open]FROM tblOpenCommittment WHERE (((tblOpenCommittment.[Job Name])=[Forms]![frmPrintByProject]![txtBoxJobName]) AND ((tblOpenCommittment.[Cost Code])" _
& "Like" & Chr(34) & Chr(42) & Chr(34) & Chr(32) & Chr(38) & Chr(32) & "[Forms]![frmPrintByProject]![txtBoxFrameValue]) AND " & strWashedstrFilter & " )"

最后一个参数 strWashedstrFilter 表示我原始帖子开头列出的子表单过滤器的输出。正如我之前所说,只要过滤的值不包含 ( " ),它就可以工作。

我已经阅读该网站多年并获得了出色的帮助。这是我第一次发布问题。提前感谢大家抽出宝贵时间发表评论。

【问题讨论】:

  • 从您的问题中并不太清楚您显示的文本在您的整个过程中的确切位置,因此更多的上下文将是有用的,也许连同生成的 SQL 示例一起。跨度>
  • 如果我正确理解您的问题,我建议使用参数化查询。 See here
  • 那些更好地称为嵌入引号,您可能可以使用该搜索短语在此处找到现有问题。
  • SQL 为我工作,将参数作为查询对象中的文字字符串。如果您在 VBA 中构建 SQL 语句,请编辑问题以提供您的代码。
  • 过滤字符串如何得到双引号?

标签: sql string vba ms-access


【解决方案1】:

作为一个例子,(因为我不确定你的数据结构或列)你会为 MS Access 使用这样的东西:

SELECT "My Quote goes > "" < right there"

所以,要比较这些值,应该是这样的:

SELECT ...
WHERE [MyColumn] = "1"" CONDUIT - EMT"

或者(如果你愿意的话)

SELECT ...
WHERE [MyColumn] = '1" CONDUIT - EMT'

【讨论】:

  • 在Access查询对象中,最后一条SQL不会使用双引号:= '1" CONDUIT - EMT'
  • 哎呀,我以为我把它拿出来了。
【解决方案2】:

您在构造中缺少一些空格,因此单词不会一起运行。并连接对表单控件的引用:

strSQL1 = "SELECT *, [Total Line Value]-[Line Total Amount invoiced] AS [Open] " & _
          "FROM tblOpenCommittment " & 
          "WHERE [Job Name]='" & [Forms]![frmPrintByProject]![txtBoxJobName] & _
          "' AND [Cost Code] LIKE '*" & [Forms]![frmPrintByProject]![txtBoxFrameValue] & _
          "' AND " & strWashedstrFilter

如果代码在frmPrintByProject后面,可以用我。:
"WHERE [Job Name]='" &amp; Me.txtBoxJobName &amp; "

【讨论】:

  • 你太棒了!!这是来自即时窗口的粘贴:** SELECT ,tblOpenCommittment.[Total Line Value]-tblOpenCommittment.[Line Total Amount invoiced] AS [Open] FROM tblOpenCommittment WHERE [Job Name]= 'Adidas' AND [Cost Code ] LIKE '*100M' AND (tblOpenCommittment.[Line Description]="1"" CONDUIT - EMT")*
  • 这些双引号是如何进入字符串的?使用单引号和撇号分隔符进行查询。
  • (可能重复)按选择过滤属性 = Forms!frmPrintByProject.[qryPOExamDetail subform].Form.Filter 返回变量 = ([qryPOExamDetail subform].[Line Description]="1"" CONDUIT - EMT") 因为导出的数据是从基础表中提取的,所以必须使用替换函数 @ 修改变量“strFilter” 987654325@返回变量=(tblOpenCommittment.[Line Description]="1"" CONDUIT - EMT")
  • 使用您的指导的 strSQL1 语句的最后两行如下所示:"' AND [Cost Code] LIKE '*" &amp; [Forms]![frmPrintByProject]![txtBoxFrameValue] &amp; _ "' AND " &amp; strFilter
  • 我用引号测试了数据。应用过滤器形成。从 FilterBy 属性中提取该过滤器字符串。有单引号。我不使用 Replace() 函数,而是用撇号分隔符包围。在 VBA 中构造的 SQL 语句对我有用。撇号可以在 strFilter 变量中,但如果不是,请将它们包含在 SQL 构造中。
猜你喜欢
  • 1970-01-01
  • 2023-01-18
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 1970-01-01
相关资源
最近更新 更多