Oracle VBA-具有多个AND语句的查询不工作

Oracle VBA-具有多个AND语句的查询不工作,oracle,vba,excel,Oracle,Vba,Excel,我很难从Oracle数据库收集数据。我已经成功地使连接运行,因此问题在于查询。目前,查询没有返回任何内容,VBA也没有对此进行抱怨 代码如下: Sub Connect_XXXX() Dim conn As ADODB.Connection Set conn = New ADODB.Connection Dim rs As New ADODB.Recordset Set rs = New ADODB.Recordset Dim myQuery As ADODB.Command Set myQue

我很难从Oracle数据库收集数据。我已经成功地使连接运行,因此问题在于查询。目前,查询没有返回任何内容,VBA也没有对此进行抱怨

代码如下:

Sub Connect_XXXX()

Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
Dim rs As New ADODB.Recordset
Set rs = New ADODB.Recordset
Dim myQuery As ADODB.Command
Set myQuery = New ADODB.Command


conn.Open "Provider=OraOLEDB.Oracle;" & _
          "Data Source=XXXX;" & _
          "User Id=YYYY;" & _
          "Password=ZZZZ"

myQuery.ActiveConnection = conn

myQuery.CommandText = "SELECT sta.index_id, sta.index_action as Action, sta.ticker, sta.company, sta.announcement_date as A_Date, sta.announcement_time as A_Time, " & _
                        "sta.effective_date as E_Date, dyn.index_supply_demand as BS_Shares, dyn.net_index_supply_demand as Net_BS_Shares, dyn.est_funding_trade as BS_Value, " & _
                        "dyn.trade_adv_perc/100 as Days_to_Trade, dyn.pre_index_weight/100 as Wgt_Old, dyn.post_index_weight/100 as Wgt_New, dyn.net_index_weight/100 as Wgt_Chg, " & _
                        "dyn.pre_est_index_holdings as Index_Hldgs_Old, dyn.post_est_index_holdings as Index_Hldgs_New, dyn.net_est_index_holdings as Index_Hldgs_Chg, sta.index_action_details as Details " & _
                        "FROM index_analysis.eq_index_actions_dyn dyn, index_analysis.eq_index_actions_static sta " & _
                        "WHERE (sta.action_id = dyn.action_id) AND (sta.announcement_date=dyn.price_date) AND (sta.announcement_date >= '01-January-2015') AND (sta.announcement_date <= '30-January-2015') " & _
                        "ORDER by sta.index_id,sta.announcement_date"



Set rs = myQuery.Execute

Sheets("Sheet1").Range("A1").CopyFromRecordset rs

rs.Close
conn.Close

End Sub   
Sub-Connect_XXXX()
Dim conn作为ADODB连接
Set conn=新的ADODB.连接
将rs设置为新ADODB.Recordset
Set rs=New ADODB.Recordset
将myQuery设置为ADODB.Command
Set myQuery=New ADODB.Command
连接打开“Provider=OraOLEDB.Oracle;”和_
“数据源=XXXX;”&_
“用户Id=YYYY;”和_
“密码=ZZZZ”
myQuery.ActiveConnection=conn
myQuery.CommandText=“选择sta.index\u id、sta.index\u操作作为操作、sta.ticker、sta.company、sta.NEUTION\u日期作为日期、sta.NEUTION\u时间作为时间,”_
“sta.生效日期为E.日,dyn.指数供求为BS.股,dyn.净指数供求为BS.股,dyn.est.资金交易为BS.股价值,”_
“dyn.trade\u adv\u perc/100作为日到日交易,dyn.pre\u index\u weight/100作为Wgt\u Old,dyn.post\u index\u weight/100作为Wgt\u New,dyn.net\u index\u weight/100作为Wgt\u Chg,”_
“dyn.pre_est_index_holdings as index_Hldgs_Old,dyn.post_est_index_holdings as index_Hldgs_New,dyn.net_est_index_holdings as index_Hldgs_Chg,sta.index_action_details as details”&_
“来自指数分析、均衡指数行动、指数分析、均衡指数行动、静态状态”_

其中(sta.action\u id=dyn.action\u id)和(sta.NOTENSION\u date=dyn.price\u date)和(sta.NOTENSION\u date>='2015年1月1日'),以及(sta.announcement_date如果要硬编码日期范围,假设
announcement_date
date
,则需要与日期进行比较,而不是与字符串进行比较。可以使用带有显式格式掩码的
to_date
将字符串转换为日期

sta.announcement_date >= to_date( '01-January-2015', 'DD-Month-YYYY')
或者您可以使用日期文字,其格式始终为YYYY-MM-DD

sta.announcement_date >= date '2015-01-01'
我的猜测是,您的代码似乎在SQL Developer中工作,因为您碰巧在SQL Developer中将
NLS\u DATE\u格式
配置为“DD Month YYYY”

实际上,您应该真正使用绑定变量,而不是硬编码日期范围之类的内容。假设您绑定了日期值,则从字符串到日期的转换(如果有)将在VB中进行,而不依赖于会话的NLS设置。选择绑定变量还有性能和安全方面的原因