【发布时间】:2016-12-06 09:00:57
【问题描述】:
在下面的代码中,我可以使用
从 excel 中获取计数objTempRecordset.Fields.Item(0).Value
但是,我想在 SQL 中使用列名别名。 即
sSQL = "Select Count(*) AS RecCount FROM [NELimits$] A WHERE A.Type = 'A' AND A.ID = " &Chr(39) & "R001" & Chr(39)
我想使用以下方法获得结果:
objTempRecordset.Fields.Item("RecCount").Value
我也试过objTempRecordset.Fields.Item("_Count(*)_").Value,但没有运气
有人可以告诉我在这种情况下如何使用列名别名吗?
注意:Excel 有 2 列 ID:具有“R001”、“R002”等值 类型:具有诸如“A”、“B”、“C”之类的值
示例代码:
sSQL = "Select Count(*) FROM [NELimits$] A WHERE A.Type = 'A' AND A.ID = " &Chr(39) & "R003" & Chr(39)
Sqlquery = sSQL
sFilePath = "C:\Temp\DataSheet.xlsx"
Dim objTempConnection : Set objTempConnection = CreateObject("ADODB.Connection")
Dim objTempRecordSet : Set objTempRecordSet = CreateObject("ADODB.Recordset")
Dim strPath
'Define constants for objTempRecordset
Const adOpenStatic=3
Const adLockOptimistic=3
Const adLockPessimistic=2
Const adCmdText = &H001
'Open connection
objTempConnection.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="& sFilePath &";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
objTempRecordset.ActiveConnection = objTempConnection
objTempRecordset.CursorType = adOpenStatic
objTempRecordset.LockType = adLockOptimistic
objTempRecordset.Open Sqlquery
If objTempRecordset.EOF Or objTempRecordset.BOF Then
msgbox "no record"
End If
msgbox "Record Count: "&objTempRecordset.RecordCount
msgbox "Value:" & objTempRecordset.Fields.Item(0).Value
【问题讨论】:
-
刚刚注意到 objTempRecordset.Fields.Item(0).Name 返回 Expr1000 和 objTempRecordset.Fields.Item("Expr1000" ).Value 返回正确的值 但是,我不确定 Expr1000 是什么意思以及它是如何分配的。不确定它是否会因不同的 Excel 工作表、数据等而改变。因此需要一种为列定义别名的方法,以便我可以根据别名检索数据
-
Resolved: ..."SELECT column_name As [alias_name] FROM..." 在 SQL 中解决了这个问题。感谢这篇文章:stackoverflow.com/questions/37466225/…
-
你确定
objTempRecordset.Fields.Item("RecCount").Value没有像你使用第一个 SQL 查询(而不是代码块内的第二个)那样工作吗?首先,您分配了一个列别名 RecCount,但没有在第二个中被 ACE SQL 引擎分配为通用 Expr1000。 -
至于你的解决方案,你在第一个 SQL 查询中做到了!
-
没错... objTempRecordset.Fields.Item("RecCount").Value 不起作用,因为我没有使用“Select Count() As [ RowCount ] FROM...” 我只在 SQL 查询中使用了“Select Count() As RowCount FROM...”,即别名应该是为了使用它,在两个方括号之间提到。