S snake Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-07 #1 数据库为informix,在线程里跑一个后台查询,如何中断这个查询呢?象informix、 SQL server等大数据库的sql 工具都提供中断一个查询的功能,如何在程序中实现?
L liguang Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-08 #6 可不可以将查询功能封装到一个线程中,然后如果不想查了,那么强行中断线程。
S snake Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-08 #9 我来抛砖引玉吧,把一个查询放在线程里是可以的,但是控制的了线程却控制不了 查询,强行中断线程后,已提交的查询并没有因此而中止,这样一来下一个查询就 提交不成,因为第一个query根本不能close。而且放在线程什么suspend,resume, terminate都是自欺欺人,没用。问了一下informix公司的人,说有两个函数: SQLFreeStmt和SQLCancel,我查到这两个函数在winnt/system32/odbc.hlp里提到, 但在delphi里怎么引用?
我来抛砖引玉吧,把一个查询放在线程里是可以的,但是控制的了线程却控制不了 查询,强行中断线程后,已提交的查询并没有因此而中止,这样一来下一个查询就 提交不成,因为第一个query根本不能close。而且放在线程什么suspend,resume, terminate都是自欺欺人,没用。问了一下informix公司的人,说有两个函数: SQLFreeStmt和SQLCancel,我查到这两个函数在winnt/system32/odbc.hlp里提到, 但在delphi里怎么引用?
蚊 蚊子 Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-09 #10 snake,查metacube里异步查询如何中断的,明天跟你谈,我的想法是用execope把他dll里的export 函数列出来。看那个是可以得函数。 你要分点分给我。我太少了。
S snake Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-09 #11 说白了就是异步执行的技术,好像只有ODBC支持而BDE不支持,在ODBC.hlp提到各种函数 怎么用,但函数众多,要写个查询要写很多语句,后来装了一个ODBCExpress,里面就有 一个ExecAsnyc的属性,所带的帮助和demo都说明这个属性设成true以后查询会在后台进 行,而且可以随时中断。哎。。。。我一把他设成true以后一打开查询后delphi就退出 ,有时候就说堆栈溢出。其死我了,自带的demo也一样。谁帮帮我?
说白了就是异步执行的技术,好像只有ODBC支持而BDE不支持,在ODBC.hlp提到各种函数 怎么用,但函数众多,要写个查询要写很多语句,后来装了一个ODBCExpress,里面就有 一个ExecAsnyc的属性,所带的帮助和demo都说明这个属性设成true以后查询会在后台进 行,而且可以随时中断。哎。。。。我一把他设成true以后一打开查询后delphi就退出 ,有时候就说堆栈溢出。其死我了,自带的demo也一样。谁帮帮我?
温 温柔一刀 Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-11 #12 BDE的设置对Sybase和MSSQL server有异步执行SQL语句的方法, 但是tquery并没有提供类似ODBC的中断查询的方法,因此设置了也没用,反而更糟糕。 而且这种设置也只对Sybase和MSSQL server有效,不具有通用性,所以没什么意义。 ODBC是使用ExecAsnyc来指定异步查询的,应该正确, 至于odbcexpress把delphi搞歇了,那就是另一回事了,不了解。
BDE的设置对Sybase和MSSQL server有异步执行SQL语句的方法, 但是tquery并没有提供类似ODBC的中断查询的方法,因此设置了也没用,反而更糟糕。 而且这种设置也只对Sybase和MSSQL server有效,不具有通用性,所以没什么意义。 ODBC是使用ExecAsnyc来指定异步查询的,应该正确, 至于odbcexpress把delphi搞歇了,那就是另一回事了,不了解。
P Pipi. Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-11 #13 BDE中断查询非常简单,创建TBDECallback,注册一个callback过程, callback类型有很多,用于中断长query的是cbCANCELQRY类型, query时候会每隔一段时间调用一下这个callback过程,返回cbrABORT退出query, 返回cbrCONTINUE 继续查询。
BDE中断查询非常简单,创建TBDECallback,注册一个callback过程, callback类型有很多,用于中断长query的是cbCANCELQRY类型, query时候会每隔一段时间调用一下这个callback过程,返回cbrABORT退出query, 返回cbrCONTINUE 继续查询。
温 温柔一刀 Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-12 #14 Callback功能是BDE提供的,只能对“严重”依赖BDE的数据库操作有效, 例如BatchMove以及某些local SQL,而对Server端查询是无效的, 时间再长callback也不会被调用,因此不能中断查询。
Callback功能是BDE提供的,只能对“严重”依赖BDE的数据库操作有效, 例如BatchMove以及某些local SQL,而对Server端查询是无效的, 时间再长callback也不会被调用,因此不能中断查询。
S snake Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-12 #15 我用odbc的sqlgetinfo函数所返回的函数也说我的informix驱动程序不支持异步查询功能, 但他自带的SQL Editor就可以实现,看了一下TBDECallback函数,参数很多,拜托pipi给出 一个具体点的例子。
我用odbc的sqlgetinfo函数所返回的函数也说我的informix驱动程序不支持异步查询功能, 但他自带的SQL Editor就可以实现,看了一下TBDECallback函数,参数很多,拜托pipi给出 一个具体点的例子。
温 温柔一刀 Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-16 #16 我有利用TBDECallback中断查询的例子,如果需要可以贴在这里,或者mail给你。 但我已经说了,只在localsql/batchmove中有用,我在MSSQL中试验,毫无反应, 我看imformix也差不多,还是不要试验了。 MS sql server的sql工具也支持中断查询,我看是内部特殊方法,不通用, 因此delphi的查询机制没有把这一功能抽象进来。
我有利用TBDECallback中断查询的例子,如果需要可以贴在这里,或者mail给你。 但我已经说了,只在localsql/batchmove中有用,我在MSSQL中试验,毫无反应, 我看imformix也差不多,还是不要试验了。 MS sql server的sql工具也支持中断查询,我看是内部特殊方法,不通用, 因此delphi的查询机制没有把这一功能抽象进来。
P player88 Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-17 #18 温柔一刀说得对,BDE对中断查询是有局限的。 记得深度历险中有过相关控件,封装了ODBC的有关函数,有源码, 应该可以通过ODBC来解决问题,可以去查查。
S snake Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-17 #19 我试了一下ODBCExpress+SQL Server 7.0,中断很成功,一换上informix就堆栈溢出, 我看见informix里也有象ODBC里的SQLCancel之类的函数,到底是谁封装谁? 温柔一刀,可以发个例子给我学习一下吗?
我试了一下ODBCExpress+SQL Server 7.0,中断很成功,一换上informix就堆栈溢出, 我看见informix里也有象ODBC里的SQLCancel之类的函数,到底是谁封装谁? 温柔一刀,可以发个例子给我学习一下吗?
Y yushaofei Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-17 #20 You can try to get the answer in the API of Database(such as Informix).