У меня есть запрос, который выглядит так:
select
tvb.oppdrag_Gjelder_id,
tvd.BEREGNINGS_ID,
tvd.KODE_KLASSE,
tvd.KONTOSTRENG,
tvd.DATO_FAKTISK_FOM,
tvd.DATO_FAKTISK_TOM,
integer(tvd.BELOP) as BELØP,
tvb.DATO_BEREGNET
from
os314t1.t_vent_detalj as tvd
inner join os314t1.t_vent_beregning as tvb on tvb.BEREGNINGS_ID = tvd.BEREGNINGS_ID
where
tvd.BEREGNINGS_ID in (
select distinct(tvb3.BEREGNINGS_ID) as BEREGNINGS_ID
from os314t1.t_vent_beregning as tvb3
inner join os314t1.T_VENT_STOPPNIVAA as tvsn3 on tvb3.BEREGNINGS_ID = tvsn3.BEREGNINGS_ID
inner join os314t1.T_VENT_STOPPSTATUS as tvss3 on tvss3.BEREGNINGS_ID = tvb3.BEREGNINGS_ID
inner join os314t1.T_VENT_DETALJ as tvd3 on tvd3.BEREGNINGS_ID = tvb3.BEREGNINGS_ID
and tvss3.LOPENR = 9999
and tvss3.KODE_VENTESTATUS not in ('KORR')
and tvsn3.KODE_FAGOMRAADE in ('TBKRAV')
and tvd3.KODE_KLASSE = 'TBKRAVUT'
and tvsn3.dato_periode_fom between '2015-01-01' and '2015-12-01'
)
and tvd.KODE_KLASSE not in ('FSKTSKAT','TBMOTOBS')
union all
select
tvb.oppdrag_Gjelder_id,
tvd.BEREGNINGS_ID,
tvd.KODE_KLASSE,
tvd.KONTOSTRENG,
tvd.DATO_FAKTISK_FOM,
tvd.DATO_FAKTISK_TOM,
integer(tvd.BELOP) as BELØP, tvb.DATO_BEREGNET
from
os314t1.t_vent_detalj as tvd
inner join os314t1.t_vent_beregning as tvb on tvb.BEREGNINGS_ID = tvd.BEREGNINGS_ID
where
tvd.BEREGNINGS_ID in (
select distinct(tvb2.BEREGNINGS_ID) as BEREGNINGS_ID
from os314t1.t_vent_beregning as tvb2
inner join os314t1.T_VENT_STOPPNIVAA as tvsn2 on tvb2.BEREGNINGS_ID = tvsn2.BEREGNINGS_ID
inner join os314t1.T_VENT_STOPPSTATUS as tvss2 on tvss2.BEREGNINGS_ID = tvb2.BEREGNINGS_ID
and tvsn2.TYPE_BILAG = 'E'
and tvss2.LOPENR = 9999
and tvss2.KODE_VENTESTATUS not in ('KORR')
and tvsn2.dato_periode_fom between '2015-01-01' and '2015-12-01'
and tvsn2.KODE_FAGOMRAADE not in ('UFORESPK')
)
and tvd.KODE_KLASSE not in ('UFOREUT')
Он отлично работает в Squirrel SQL клиенте, но когда я пытаюсь запустить его в своем коде VBA, он выдает ошибку:
Ошибка во время выполнения '-2147217900 (8004e14) НЕЗАКОННОЕ ИСПОЛЬЗОВАНИЕ ВЫБОРА КЛЮЧЕВОГО СЛОВА.
TOKEN SKIP ОПТИМИЗИРУЕТ ДЛЯ FETCH, КРОМЕ МИНУСА
БЫЛО ОЖИДАЕМОЕ SQLSTATE: 42601, SQLCODE: -199
Я пытался найти ответ на этот вопрос, но не смог. Кто-нибудь знает, что не так, так как это работает в моем клиенте SQL?
Использование Excel 2010 и драйвера «Microsoft OLE DB Provider для DB2» для подключения.
Код VBA выглядит следующим образом:
'* DEL 1 - Hente EO-vedtak fra PESYS *
Application.StatusBar = "Henter EO-vedtak... Vennligst vent!"
Dim SQLquery As String 'Variabel som holder SQL spørringen
Dim Conn As New ADODB.Connection 'Oppretter en databasekobling
Dim MyRecordset As New ADODB.Recordset 'Dette er et array som holder på dataene du henter med SQL'en
Dim teller As Integer 'Teller antall kolonner i MyRecordset
ConnectionString = "Provider=MSDAORA.1;Password=Password;User ID=Username;Data Source=url_here" 'Tilkoblingsstrengen for databasen
Conn.Open ConnectionString 'Åpner tilkobling til databasen
Sheets("SQL").Select
Range("A53:A62").Select
'Bygger opp SQL'en, linje for linje
For Each c In Selection
SQLquery = SQLquery & c.Value & vbCrLf
Next c
MyRecordset.Open SQLquery, Conn 'Åpner et array (MyRecordset) og kjører aktuell SQL streng ved hjelp av den åpne tilkoblingen (Conn)
'Pynter arket med overskrifter fra MyRecordset
Sheets("EO-vedtak PESYS").Select
For teller = 0 To MyRecordset.Fields.Count - 1
Sheets("EO-vedtak PESYS").Cells(1, teller + 1).Value = MyRecordset.Fields(teller).Name
Next
Sheets("EO-vedtak PESYS").Range("A2").CopyFromRecordset MyRecordset 'Skriver resultatsettet i A2 og nedover
MyRecordset.Close 'Lukker array
Conn.Close 'Lukker databasetilkoblingen
Cells.Select
Cells.EntireColumn.AutoFit
Range("A1").Select
Application.StatusBar = "EO-vedtak fullført!"
'* DEL 2 - Hente EO-beregninger med beløp *
ConnectionString = "Provider=DB2OLEDB.1;Network Transport Library=TCPIP;Network Address=url_here;Network Port=Port_number_here;Initial Catalog=OS314T1;Package Collection=NULLID;Default Schema=OS314T1;User ID=Username;Password=Password;" 'Tilkoblingsstrengen for databasen
Conn.Open ConnectionString 'Åpner tilkobling til databasen
Sheets("SQL").Select
Range("A3:A49").Select
'Bygger opp SQL'en, linje for linje
For Each c In Selection
SQLquery = SQLquery & c.Value & vbCrLf
Next c
MyRecordset.Open SQLquery, Conn 'Åpner et array (MyRecordset) og kjører aktuell SQL streng ved hjelp av den åpne tilkoblingen (Conn)
'Pynter arket med overskrifter fra MyRecordset
Sheets("EO beregninger med beløp").Select
For teller = 0 To MyRecordset.Fields.Count - 1
Sheets("EO beregninger med beløp").Cells(1, teller + 1).Value = MyRecordset.Fields(teller).Name
Next
Sheets("EO beregninger med beløp").Range("A2").CopyFromRecordset MyRecordset 'Skriver resultatsettet i A2 og nedover
MyRecordset.Close 'Lukker array
Conn.Close 'Lukker databasetilkoblingen
Cells.Select
Cells.EntireColumn.AutoFit
Range("A1").Select
Application.StatusBar = "Innhenting av data fullført!"
*****
Выдает ошибку во втором запросе к базе данных.