2016-09-20 74 views
0
Sub Run() 

    Call ConnectDB 

    Dim Cmd As ADODB.Command 
    Dim rcs As ADODB.Recordset 
    Dim SQL As String 
    Dim res() As String 

    Set Cmd = New ADODB.Command 
    Set Cmd.ActiveConnection = con 

    SQL = "select tl.id, al.price_crossing, al.price_exchange_fees, tl.charges_execution, tl.charges_mariana, tl.charges_exchange, tl.trade_date, un.value, tl.nb_crossing from mfb.trade_leg tl" & _ 
    "inner join mfb.trade t on t.id = tl.id_trade" & _ 
    "inner join mfb.instrument i on t.id_instrument = i.id" & _ 
    "inner join mfb.instrument_type it on it.id = i.id_instrument_type" & _ 
    "inner join mfb.options o on o.id_instrument = i.id" & _ 
    "inner join mfbref.mfb.underlying un on un.id = o.id_underlying" & _ 
    "inner join mfb.allocation_leg al on al.id_trade_leg = tl.id" & _ 
    "where tl.trade_date > '20160101' and t.state = 3" 

    Cmd.CommandText = SQL 
    Set rcs = Cmd.Execute() 

每当我执行此代码时,出现调试错误,提示'tl'附近的语法不正确。我尝试以不同的方式执行SQL,但错误不会改变如何在VBA Excel中执行SQL查询

+0

也许你错过了之前的空格内连接语句 – 2016-09-20 12:57:13

+1

你没有线之间的空间。 – czuroski

+0

我不是关于spaes,是否需要在'tl'之前放置'AS'。 – Nebi

回答

2
SQL = "select tl.id, al.price_crossing, al.price_exchange_fees, tl.charges_execution, tl.charges_mariana, tl.charges_exchange, tl.trade_date, un.value, tl.nb_crossing from mfb.trade_leg AS tl " & _ 
"inner join mfb.trade t on t.id = tl.id_trade " & _ 
"inner join mfb.instrument i on t.id_instrument = i.id " & _ 
"inner join mfb.instrument_type it on it.id = i.id_instrument_type " & _ 
"inner join mfb.options o on o.id_instrument = i.id " & _ 
"inner join mfbref.mfb.underlying un on un.id = o.id_underlying " & _ 
"inner join mfb.allocation_leg al on al.id_trade_leg = tl.id " & _ 
"where tl.trade_date > '20160101' and t.state = 3 " 
+0

你很快就会大声笑 –

+0

好,但你得到了“回答”标记 – Nebi

0

将别名分配给SQL对象时应使用“as”。

尝试改变

 ...from mfb.trade_leg tl... 
    ...join mfb.trade t... 
    ...join mfb.options o ... 

 ...from mfb.trade_leg as tl... 
    ...join mfb.trade as t... 
    ...join mfb.options as o ... 
+0

1)这不是语法错误的根本原因。 2)它实际上是一个[范围可变](https://books.google.co.uk/books?id=Jx5UCwAAQBAJ&pg=PT162&lpg=PT162&dq=database+range+variable&source=bl&ots=-DhuMdazmr&sig=cVB4Sn4N2_igTwbLVwG7PFdXo9U&hl=en&sa=X&ved=0ahUKEwi56KfZlZ7PAhUCkZQKHWexBBMQ6AEINzAE #v = onepage&q =数据库%20range%20variable&F = FALSE)。 3)基于意见的例如我倾向于省略'AS',因为它鼓励错误的想法,即'table as x'错误地暗示'x'是一个别名。 – onedaywhen

1
SQL = "select tl.id, al.price_crossing, al.price_exchange_fees, tl.charges_execution, tl.charges_mariana, tl.charges_exchange, tl.trade_date, un.value, tl.nb_crossing from mfb.trade_leg tl " & _ 
"inner join mfb.trade t on t.id = tl.id_trade " & _ 
"inner join mfb.instrument i on t.id_instrument = i.id " & _ 
"inner join mfb.instrument_type it on it.id = i.id_instrument_type " & _ 
"inner join mfb.options o on o.id_instrument = i.id " & _ 
"inner join mfbref.mfb.underlying un on un.id = o.id_underlying " & _ 
"inner join mfb.allocation_leg al on al.id_trade_leg = tl.id " & _ 
"where tl.trade_date > '20160101' and t.state = 3;" 

你冷落吨的空间

+1

谢谢。这帮了我很多 –

+0

给了一个人一个大拇指!并且不要忘记标记某人的答案为“回答” –

+0

也不值得,因为间距是嵌入式SQL的问题,它很好地开发模式。我个人会在每一行的末尾留下我的空间。建立一种行为模式将有助于您在未来发现问题。 @PaulKuriakides –