2016-04-15 82 views
0

如果我在PGAdmin中運行下面的SQL,它工作正常,並根據需要轉換eventdate,但只要我嘗試將此添加到EXCEL VBA中,就會收到意外的符號錯誤(VBA中的SQL代碼顯示意外的符號錯誤

誰能告訴我爲什麼這個錯誤發生?

Const sqlconnection = "Provider=oledb;" 
Dim conn As New Connection 
conn.ConnectionString = sqlconnection 
conn.Open 
Dim rs As Recordset 

Sheets("Sheet1").Select 
Cells.Select 
Selection.ClearContents 
Range("A1").Select 

Dim DATA As String 
DATA = "SELECT DISTINCT hist.master_id, hist.eventdate, to_date(case " _ 
    & "when char_length(hist.eventdate) = 8 then hist.eventdate " _ 
    & "when char_length(hist.eventdate) = 6 then concat(hist.eventdate,'01') " _ 
    & "when char_length(hist.eventdate) = 4 then concat(hist.eventdate,'0101') " _ 
    & "when char_length(hist.eventdate) = 0 then concat(hist.eventdate,'18000101') " _ 
    & "else '18000101' end,'YYYYMMDD') as eventdate2, hist.entity_ty, hist.read_code, hist.read_term, hist.priority, hist.enddate, " _ 
& "char_length(hist.enddate) enddate_length " _ 
& "FROM hist INNER JOIN person p ON hist.master_id=p.entity_id " _ 
& "WHERE char_length(hist.enddate) = 0 and to_date(case " _ 
    & "when char_length(hist.eventdate) = 8 then hist.eventdate " _ 
    & "when char_length(hist.eventdate) = 6 then concat(hist.eventdate,'01') " _ 
    & "when char_length(hist.eventdate) = 4 then concat(hist.eventdate,'0101') " _ 
    & "when char_length(hist.eventdate) = 0 then concat(hist.eventdate,'18000101') " _ 
    & "else '18000101' end,'YYYYMMDD') < '2014-01-01' " _ 
& "ORDER BY hist.master_id " 

Set rs = conn.Execute(DATA) 
With ActiveSheet.QueryTables.Add(Connection:=rs, Destination:=Range("A1")) 
    .Refresh 
End With 

rs.Close 

回答

0

也許,這個問題是日期字段。 當你構建一個包含日期或時間條件的SQL語句,則必須將日期或時間數字符號(#)分隔符。

例子:

costrSQL = "SELECT * FROM Orders WHERE OrderDate >#3-1-2009#;" 

我也建議刪除查詢的某些部分,然後再試一次,這樣你就可以找出包含問題查詢部分。

+0

「#」分隔符是Microsoft Access的一個特性。 –