2016-04-15 39 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的一个特性。 –