【问题标题】:Oracle VBAscript connection errorOracle VBAscript 连接错误
【发布时间】:2018-05-11 15:07:23
【问题描述】:
Dim strDBDesc As String
strDBDesc = "(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = ##)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = ##)))"
cn.Open "Provider=OraOLEDB.Oracle;Data Source=" & strDBDesc & ";User ID=##;Password=##;"
                                           
query1 = ""
query1 = ERM.Sheets("query").Range("A10")
query1 = Replace(query1, "v_job_name", v_field1)
                    
'Set OraDynaSet = objdatabase.DBCreateDynaset(query1, 0&)
Dim OraDynaSet As ADODB.Recordset
                    
Set OraDynaSet = CreateObject("ADODB.Recordset")
OraDynaSet.ActiveConnection = cn
OraDynaSet.Open query1, cn, adOpenStatic

我收到错误消息,因为 ORA-00933 sql 命令没有正确结束

错误信息

查询 1

select 
job_name,Status
 from (
select  Distinct  a.job_name,
          a.description description,Decode (job_type,98,'Box',99,'Command Job',102,'File watcher job',job_type) job_type,
      substr(decode(d.status,1,'Running',
                             3,'Starting',
                             4,'Success',
                             5,'Failed',
                             6,'Terminated',
                             7,'On Ice',
                             8,'Inactive',
                             9,'Activated',
                             11,'On Hold',
                             12,'Que Wait',
                             d.status),1,9) status,
a.mach_name,a.owner,g.command,g.std_err_file,g.std_out_file,f.days_of_week,f.start_times,f.start_mins,f.run_calendar,f.max_run_alarm,profile
     from AEDBADMIN.ujo_job a,
          AEDBADMIN.ujo_job_runs c,
          AEDBADMIN.ujo_job_status d,
          (select joid,max(STARTIME) startime,
                  max(endtime) endtime
             from AEDBADMIN.ujo_job_runs group by joid) e,
             AEDBADMIN.ujo_command_job g,
            AEDBADMIN.ujo_sched_info f
    where a.joid  =  c.joid(+)
      and a.joid  =  d.joid(+)
      and a.joid  =  e.joid(+)
      and a.joid  =  f.joid(+)
      and a.joid  =  g.joid(+)
      and (c.startime = e.startime or c.startime is null)
      and job_name ='v_job_name'// job name replaces 
      and a.is_active =1
);

【问题讨论】:

  • 我收到错误消息,因为 ORA-00933 sql 命令未正确结束。你能告诉我我的连接字符串有什么问题吗
  • 我在这个命令上遇到错误 -OraDynaSet.Open query1, cn, adOpenStatic
  • 查询字符串是什么?尝试Debug.Print query1 以获得它。
  • 查询量有点大,怎么发在这里?
  • @WernfriedDomscheit - 我已经在这里发布了我的代码。请让我知道代码中的问题

标签: oracle excel vba


【解决方案1】:

我认为是这个问题

and job_name ='v_job_name'// job name replaces 

在 SQL cmets 中由-- ...(单行)或/* ... */(多行)完成。

但是,也许 ADODB 根本不支持 cmets,我建议完全删除它。

或者它是末尾的分号; - 删除它。

请注意,您应该重写查询并使用 ANSI 连接语法而不是旧的 Oracle 连接语法 - 特别是对于 OUTER JOINS。

【讨论】:

  • -我尝试更改查询,但仍然没有得到我的输出结果。你能帮我在 VBA 到 oracle 的连接字符串中吗
  • 你从Debug.Print query1 得到了什么(当然是在你做了Replace() 之后)?
  • @ Wernfried Domscheit- Excel 本身被绞死
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-13
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
  • 1970-01-01
相关资源
最近更新 更多