Cześć, na co dzień w pracy korzystamy z dużej ilości plików Excela, dane głównie pochodzą z baz danych, więc wiele plików to po prostu makra, które wyciągają dane do arkuszy jakimś zapytaniem. Poniżej kod VBA, który wyciąga dane.
Sub test()
zapytanie = Sheets("start").Range("C1").Value
adres = "Driver={Microsoft ODBC for Oracle};server=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xx.xx.xxx)(PORT=xxxx)))(CONNECT_DATA=(SID=xxxx)));Uid=xxx;Pwd=xxx;"
With Sheets("pom").QueryTables.Add(Connection:="ODBC;" & adres, Destination:=Sheets("pom").Range("A1"))
.CommandText = zapytanie
.Refresh BackgroundQuery:=False
End With
End Sub
W przypadku prostych zapytań:
SELECT *
FROM TABELA
WHERE DATA = '2018-05-29"
Nie ma najmniejszego problemu z tym, żeby w nowym arkuszu pojawiły się wyniki.
Problem pojawia się przy takim zapytaniu, w którym jest trochę działań matematycznych.
SELECT WALUTA, DATA_DF - DATA_DANYCH as DNI, DATA_DF as DATA,
DF_FINAL DF FROM ( SELECT DATA_DANYCH, WALUTA, DATA_DF, DAT_DOL, DF_DOL, DAT_GORA, DF_GORA,
CASE WHEN DATA_DF = DAT_DOL THEN DF_DOL
ELSE
ROUND(POWER(DF_DOL, (DAT_GORA - DATA_DF)/(DAT_GORA - DAT_DOL) * (DATA_DF - DATA_DANYCH)/(DAT_DOL - DATA_DANYCH))
* POWER(DF_GORA, (DATA_DF - DAT_DOL)/(DAT_GORA - DAT_DOL) * (DATA_DF - DATA_DANYCH)/(DAT_GORA - DATA_DANYCH)),6) END
DF_FINAL
FROM ( SELECT DF2.DATA_DF DATA_DF, DF2.DATA_DATE DATA_DANYCH, DF2.DF_DATE DAT_DOL, DF2.DF DF_DOL,
DF2.DF_DATE_NEXT DAT_GORA, DF2.DF_NEXT DF_GORA, DF2.CURRENCY WALUTA
FROM ( SELECT CASE WHEN DAT.DATA_DF >= DF.DF_DATE AND DAT.DATA_DF < DF.DF_DATE_NEXT THEN 'OK'
ELSE
'USUNAC' END ZNACZ, DAT.*, DF.*
FROM (SELECT data_date, df_date, df, currency,
LEAD(DF_DATE) OVER (PARTITION BY CURRENCY ORDER BY DF_DATE) df_date_next,
LEAD(DF) OVER (PARTITION BY CURRENCY ORDER BY DF_DATE) df_next
FROM (SELECT data_date, df,currency, TO_DATE(df_date,'YYYY-MM-DD') df_date, T_NUMBER, T_UNIT
FROM TABELA_PRZYKLAD
WHERE DATA_DATE = '2018-05-29'
AND CONFIG_TYPE = 'PROD' )) DF,
(SELECT TO_DATE('2018-05-29') + ROWNUM DATA_DF FROM DUAL CONNECT BY LEVEL <= 7200) DAT) DF2 WHERE DF2.ZNACZ = 'OK')
ORDER BY WALUTA, DATA_DF) WHERE WALUTA IN ('PLN')
W przykladku sql developera nie ma najmniejszego problemu, z wyciągnięciem danych z powyższego zapytania. Niestety w excelu pojawiają się tylko nagłówki.
Czy ktoś orientuje się z czego może wynikać ten problem? Czy to jakaś ułomność excela?