从VBA连接到teradata并运行代码

时间:2013-02-26 06:04:10

标签: excel-vba teradata vba excel

  1. 我们经常让Excel连接到teradata数据库并为我们生成的各种报告/模型运行一些sql。如果我是对的,这将始终按照Queryman中运行的标准查询连接和“执行”。
  2. 但是,我希望能够告诉它连接和'执行并行'。
  3. 因为我的查询需要大约2-3小时来获取数据,如果我从excel VBA运行它,那么我无法在Excel应用程序上执行任何操作。
  4. 我想要的是,一旦我在teradata上发出查询,它就会运行并且我的excel也可以获得获取数据所需的时间。
  5. 提前致谢!!!

2 个答案:

答案 0 :(得分:1)

这是建立2个独立的连接并逐个执行:

Set objmyconn = New ADODB.Connection
Set objmyconn2 = New ADODB.Connection


objmyconn.Open "Driver={Teradata};DBCName=DB1;Database=DB1;Uid=LUSER1;Pwd=LPWD1;"
objmyconn2.Open "Driver={Teradata};DBCName=DB1;Database=DB1;Uid=LUSR2;Pwd=LPWD2;"

Set RS = objmyconn.Execute("SELECT USER")

While Not RS.EOF
  MsgBox (RS.Fields(0).Value)
  RS.MoveNext
Wend

Set RS2 = objmyconn2.Execute("SELECT USER")

While Not RS2.EOF
  MsgBox (RS2.Fields(0).Value)
  RS2.MoveNext
Wend


objmyconn.Close
objmyconn2.Close

对于并行处理,您需要将上述代码拆分为两个不同的proc并安装并行处理Excel附加组件;这样,您的两个Teradata连接将同时执行。

或者更好 - 通过2个并行VBS文件执行这些调用,而不是试图征服Excel。

答案 1 :(得分:0)

我可以说2到3个小时很长一段时间!

我只能建议一件事,因为你还没有任何代码可以继续,我不熟悉连接类型:

Excel可以打开多个应用程序实例,这与当前打开的工作簿中的新工作簿完全不同。

有几种方法可以检查,主要的一种方法是你无法链接到另一个excel实例中的一个单元格,我经常在尝试在不在同一个实例中的工作簿之间执行vlookup时得到这个。如果你按<ctrl> + <c>循环遍历你的工作簿,其他excel实例就不会显示。

您可以通过右键单击任务栏上的Excel并打开一个新的Excel来打开一个新实例。如果成功,将无法打开excel。

顺便说一句,我将异步连接到oracle并使用一个循环来检查连接的状态并添加Do Events函数以启用excel以保持工作。