如何实现多线程SQL查询的OLE AUTOMATION SERVER(200分)

  • 主题发起人 主题发起人 nicol
  • 开始时间 开始时间
N

nicol

Unregistered / Unconfirmed
GUEST, unregistred user!
此构件需完成以下功能:
1、以一个SQL语句作为输入参数
2、三个线程分别连接ORACLE,SYBASE,SQL SERVER数据库,分别执行该查询,
并将查询结果保存在一个SQL SERVER临时表中。
恳请各位大虾指教。
 
可以分别建立6个THREAD, 然后连ORACLE, SYBASE, SQL, 3个SQL临时库.
分别执行该查询,成功就SQL INSERT INTO SQL临时库中.
 
用异构查询.
三个线程足够了. 每个线程用个TQuery.
分别执行: insert into ":MSSQL:temptable" select .... from ":ORACLE:table"...
....................................... from ":SYBASE:table" ...
....................................... from ":MSSQL:table"...

您需要做的是设置三个数据库别名分别连接mssql, oracle, sybase.
在用户请求时, 分析用户输入的sql(只要查找"from"部分, 然后加上数据库别名变量, 再在前
面加上生成临时表的语句即可), 分别生成三个相应的sql交给三个线程. 待全部线程结束后
返回临时表即可.
 
Another_eYes,此构件是不可视的(用于ASP),也可使用Tquery和Tthread类吗?
 
当然可以:
query可以用nil作为owner使用. 只是这时你需要create一个database, 一个session, 把
它们串起来使用. (都用nil作为create的参数).
 
Another_eYes:
使用一个异构查询需要同时连接两个数据库,程序运行时分别弹出这两个数据库的
登录对话框,对于非可视构件是不可以的。如果只连接一个数据库,还可用一个Tdatabase解决这个问题,我该怎样取消这两个对话框呢?
在此情况下,异构查询要求select出的数据类型同要insert的表完全一致,如有不同,就不能使用异构查询,需将select出的数据转换之后才能insert,不知delphi是否支持declare cursor,这样我就可以定义两个tdatabase和一个tquery,先将query同一个database相连,将数据select出来放入游标,完成转换后,再将query 与另一database连接,将数据插入,也可解决对话框的问题。
请指教。
 
多人接受答案了。
 

Similar threads

后退
顶部