使用列别名在下面的代码获取的价值,我可以用VBScript中的Excel ADO连接:在SQL查询
objTempRecordset.Fields.Item(0).Value
不过,我想用列名别名SQL从Excel中获取计数。 即
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”)。值** 返回正确的值 但是,我不确定** Expr1000 **的含义以及它是如何分配的。 不知道它是否会改变为不同的Excel表,数据等,因此需要一种方法来定义列的别名,以便我可以检索基于别名的数据 – Yogesh
已解决: ...“SELECT column_name ** As [ SQL中的alias_name] ** FROM ...“解决了这个问题。 感谢这篇文章:http://stackoverflow.com/questions/37466225/expr1000-error-when-performing-a-sum-on-a-sql-query-in-excel – Yogesh
你确定'objTempRecordset.Fields .Item(“RecCount”)。Value如果你使用了第一个SQL查询(不是代码块中的第二个)首先,您分配了一个列别名* RecCount *,但不在ACE SQL引擎指定的通用* Expr1000 *中。 – Parfait