2016-12-05 10 views
0

에 열 별칭을 사용하여 값을 취득 나는VBScript를 엑셀 ADO 연결 : 코드를 다음에 SQL 쿼리

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하지만

누군가가 나를 열 이름 별칭을 사용하는 방법을 알려 주시기 바랍니다 수있는 행운을 시도 이 경우에는?

참고 : 예컨대 "R001", "R002" 유형으로 값 : 엑셀 2 열 ID를 가지고

: 예컨대 "A", "B", "C"

샘플 코드와 같은 값 공백, 특수 문자 (영숫자가 아닌)와 (쿼리 통합 문서에서 여기에 사용) ACE의 SQL 엔진, 원래 필드 이름, 열 별칭 또는 테이블 이름으로

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 

+0

그냥 ** 그 ** objTempRecordset.Fields.Item (0) .NAME ** 반환 ** Expr1000 ** 및 ** objTempRecordset.Fields.Item ("Expr1000"). 가치를 발견 올바른 값을 반환합니다. 그러나 ** Expr1000 **의 의미와 할당 방법을 잘 모르겠습니다. 엑셀 시트, 데이터 등이 달라지는지 확실하지 않으므로 별칭을 기반으로 데이터를 검색 할 수 있도록 별칭을 정의하는 방법이 필요합니다. – Yogesh

+0

해결 방법 : ... "SELECT column_name ** As [ alias_name] ** FROM ... "SQL에서 문제가 해결되었습니다. 이 게시물 덕분에 : http://stackoverflow.com/questions/37466225/expr1000-error-when-performing-a-sum-on-a-sql-query-in-excel – Yogesh

+0

확실합니까? objTempRecordset.Fields .Item ("RecCount"). Value'는 첫 번째 SQL 쿼리 (두 번째 코드 블록이 아닌)를 사용했다면 작동하지 않았습니다. 먼저 * ACE SQL 엔진이 제네릭 * Expr1000 *으로 할당하는 열 별칭 * RecCount *를 할당했지만 두 번째는 할당하지 않았습니다. – Parfait

답변

1

, 또는 reserved words는에 싸여해야 대괄호 또는 백 슬래시을 올바르게 이스케이프 처리합니다.

스페이스

sSQL = "Select Count(*) AS [Rec Count] FROM [NELimits$] A" _ 
      & " WHERE A.Type = 'A' AND A.ID = 'R003'" 
sSQL = "Select Count(*) AS `Rec Count` FROM [NELimits$] A" _ 
      & " WHERE A.Type = 'A' AND A.ID = 'R003'" 

특수 문자 (예를 들어, 하이픈 및 파운드/해시 태그 기호)

sSQL = "Select Count(*) AS [Rec-Count] FROM [NELimits$] A" _ 
      & " WHERE A.Type = 'A' AND A.ID = 'R003'" 
sSQL = "Select Count(*) AS `Rec-Count` FROM [NELimits$] A" _ 
      & " WHERE A.Type = 'A' AND A.ID = 'R003'" 

sSQL = "Select Count(*) AS [Rec#] FROM [NELimits$] A" _ 
      & " WHERE A.Type = 'A' AND A.ID = 'R003'" 
sSQL = "Select Count(*) AS `Rec#` FROM [NELimits$] A" _ 
      & " WHERE A.Type = 'A' AND A.ID = 'R003'" 

예약어 (예를 들어, 카운트)

sSQL = "Select Count(*) AS [Count] FROM [NELimits$] A" _ 
      & " WHERE A.Type = 'A' AND A.ID = 'R003'" 
sSQL = "Select Count(*) AS `Count` FROM [NELimits$] A" _ 
      & " WHERE A.Type = 'A' AND A.ID = 'R003'" 

그렇지 않으면 모든 필드 이름 또는 열 별칭은 쿼리에서 합법적이며 다음 형식의 레코드 집합에서 읽을 수 있습니다 :

objTempRecordset.Fields.Item(0).Value    ' BY INDEX IN ITEM ' 
objTempRecordset.Fields.Item("Rec Count").Value  ' BY NAME IN ITEM ' 
objTempRecordset.Fields("Rec Count").Value   ' BY NAME IN FIELD COLLECTION ' 
objTempRecordset![Rec Count].Value     ' BY NAME (EXCLAMATION POINT QUALIFIER) ' 

또한 누락 된 열 별칭은 ACE와 함께 특별한 방식으로 처리됩니다

쿼리 식의 누락 별칭 (예 :) 함수 응집 카운트

sSQL = "Select Count(*) FROM [NELimits$] A" _ 
      & " WHERE A.Type = 'A' AND A.ID = 'R003'" 

필드

sSQL = "Select ID, ID FROM [NELimits$] A" _ 
      & " WHERE A.Type = 'A' AND A.ID = 'R003'" 

두 상술 누락 별칭은 ACE 엔진이 열 별칭 일반적 부터 생성 중복에 별칭 누락 EXPR1 (MS 액세스 내부 - ACE 엔진에 대한 일반적인 인터페이스) 또는 ODBC 연결에 대해서는 Expr1000이고 다른 모든 이름없는 표현식이나 이름이없는 중복 필드 참조의 경우 증가합니다.

+0

굉장! 자세한 답변을 주셔서 감사합니다 @ Parfait – Yogesh

+0

아! 그걸 몰랐어. 끝난! – Yogesh