【问题标题】:Square brackets inside the name of column in VBA query?VBA查询中列名内的方括号?
【发布时间】:2021-05-12 01:34:27
【问题描述】:

我在尝试访问的列名称中遇到方括号问题。
列名:[KPI] 标准交付能力 SO [ 这是我的代码:

Dim rs As New ADODB.Recordset
Dim query As String
Dim WhatToSelect as String

query = "Select " & WhatToSelect & " From" & sourceSheet & ".[Sheet1$]"
         rs.Open query, connection
         rs.MoveFirst
         i = rs.Fields(rs.Fields(0).name).Value

基本上我正在尝试查找变量,该变量位于“WhatToSelect”变量中

我试过了:

WhatToSelect = "avg([[KPI] Standard Delivery Capability SO [<0/0]])"
WhatToSelect  =  "avg(`[KPI] Standard Delivery Capability SO [<0/0]`)"

到目前为止没有任何效果。
(它适用于所有其他列,没有 [ ] )

【问题讨论】:

  • 您的where 子句未完成。 where 条件是什么?
  • 我的错,这部分确实很重要,它工作得很好,它充满了变量,所以我认为这样代码会更清晰。唯一的问题是列名中的 suqare 括号。
  • 您是否尝试过使列类似于“[带有 [ 和 ] 括号的名称]”?那么在字段名称周围加上方括号并转义字段中已经存在的方括号?
  • @Roemer 我不确定,你是什么意思。您能否给我举个例子,在这种情况下会如何?如果您的意思是我应该更改列的名称,我不能这样做。
  • 啊,我现在看到 stackoverflow 删除了我的反斜杠! Arggg...让我们再试一次:[a name with \[ and \] brackets]。但 FunThomas 可能有更好的主意。

标签: sql vba database ado


【解决方案1】:

找不到任何关于此的文档,所以我做了一些实验。我创建了一个包含与您的列名完全相同的列的小表,执行了Select * from [Sheet1$] 并查看了返回的记录集中的列名。原来括号里的括号换成了:

Dim conn As ADODB.Connection, rs As ADODB.Recordset
Set conn = New ADODB.Connection
Dim connString As String
connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Name & ";" & "Extended Properties=""Excel 12.0 Xml;HDR=YES;"""
conn.Open connString
Set rs = conn.Execute("Select * from [Sheet1$]")

Dim i As Integer
For i = 0 To rs.Fields.Count
    Debug.Print rs.Fields(i).Name
Next

>> (KPI) Standard Delivery Capability SO (<0/0)

要查询该字段,您需要 (a) 将字段名称用括号括起来,并且 (b) 将字段名称中的括号替换为括号:

dim fieldname as String, sql as String
fieldName = "[(KPI) Standard Delivery Capability SO (<0/0)]"

' Use field in result set:
sql = "Select " & fieldname & " from [Sheet1$]"
Set rs = conn.Execute(sql)

' Use field in Where-Clause:
sql = "Select * from [Sheet1$] where " & fieldname & " > 100"
Set rs = conn.Execute(sql)

在您的情况下,您要在该字段上执行聚合函数,您需要指定

WhatToSelect = "avg([(KPI) Standard Delivery Capability SO (<0/0)])"

【讨论】:

  • 非常感谢,你刚刚救了我。在这行代码上工作了几个小时。
猜你喜欢
  • 1970-01-01
  • 2021-01-03
  • 1970-01-01
  • 2018-12-28
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多