в моем коде Excel VBA я подключаюсь к базе данных oracle, чтобы запрашивать базу данных в различных случаях. В первый раз у меня был простой запрос, и он дал правильные результаты. Но во второй раз у меня сложный запрос, и набор записей проверяется на ноль, когда я выкидываю точную строку sqlString в Oracle SQL Developer, я получаю результаты. Так что я действительно озадачен тем, что здесь происходит.
Вот мой код:
Global ssConn As New adodb.Connection
Global connStr As String
Global rs As New adodb.Recordset
public sub init()
connStr = "Provider=OraOLEDB.Oracle; Data Source=XXXXX; user id=AAAAA;password=BBBBB"
ssConn.Open connStr
sqlStr = "select sector_no, sector_name from Sectors where sector_level =2"
Set rs = ssConn.Execute(sqlStr)
while not rs.EOF
do stuff
wend
' other code ...
' here I do get all the results correctly
end sub
Public Sub getSecurities()
Dim sqlStr As String
sqlStr = "select distinct a.isin, a.ticker, a.market_cap, a.ipo_date, a.gics2_sector from Constituent_Securities a, Index_Constituents b "
sqlStr = sqlStr & " where b.index_ticker in ('SPX', 'RIY') and a.isin = b.isin and a.ipo_date <= '" & Format(cutoff_date, "dd-mmm-yyyy") & "' "
sqlStr = sqlStr & " and exists (select * from Security_Price_Hist where isin = a.isin and business_date <= '" & Format(cutoff_date, "dd-mmm-yyyy") & "')"
'--& "' and a.gics2_sector in (" & sectorStr & ")"
sqlStr = "select sector_no, sector_name from Sectors where sector_level =2"
Set rs = ssConn.Execute(sqlStr)
'ReDim avail_secs(num_secs) As Security
Dim i As Integer
i = 0
While Not rs.EOF
avail_secs(i).sec_id = rs.Fields(0).Value
avail_secs(i).ticker = rs.Fields(1).Value
avail_secs(i).market_cap = rs.Fields(2).Value
avail_secs(i).ipo_date = rs.Fields(3).Value
avail_secs(i).sector = rs.Fields(4).Value
rs.MoveNext
i = i + 1
Wend
num_secs = i - 1
rs.Close
End Sub
Public Sub generateEquityPortfolios()
Call init
Call getSecurities
'... other codes
end pub
Итак, во время первой инициализации подпрограммы я получил правильные результаты, но в подпрограмме getSecurities rs.EOF всегда возвращал true, даже хотя, когда я копирую эту строку sql в Oracle SQL Developer, я получаю результаты.
Может кто-нибудь помочь, пожалуйста? И, что еще более странно, этот код работал нормально, но перестал работать после того, как обновилось также какое-то обновление системы с версией Oracle.
Большое спасибо!
Селсия