简体   繁体   中英

How to execute SQL queries in VBA Excel

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()

Every time I execute this code an debug error appears saying incorrect syntax near 'tl'. I've tries executing the SQL in different ways but the error won't change

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 "
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;"

you left out tons of spaces

You should use "as" when assigning aliases to your SQL objects.

Try changing

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

to

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM