关于VB6.0的多线程,如何在后台建立一个优先级较低的线程来处理数据库查询,而不影响前台的界面操作?前面几个帖子帮忙过的,进来就有分

wkoji 2002-04-08 02:23:33
关于VB6.0的多线程,如何在后台建立一个优先级较低的线程来处理数据库查询,而不影响前台的界面操作?
清帮忙给点提示,有具体代码最好。
...全文
238 点赞 收藏 33
写回复
33 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
哈哈,还真能回......

看来CSDN改版改得不错,把以前的数据全都弄到新论坛里来了.

回复
02年的帖子,看看能不能回复一下...............
回复
ltpao 2002-04-09
注册
回复
wkoji 2002-04-09
.tlb用什么东西打开?
.tlb用什么东西打开?
回复
wanghongfeng 2002-04-09
给我来一份吧
bruce808@21cn.com
回复
RogerSong 2002-04-09
.tlb用什么东西打开?
回复
dudu320 2002-04-09
给我来一份吧
dudu320@263.net
回复
wkoji 2002-04-09
那么还可以用其他什么方法啊???
回复
gump2000 2002-04-09
可以用其他方法解决
真的不建议在vb里使用multi\thread
回复
wkoji 2002-04-09
楼上的说的是不是真的啊,那样我可就完了???
回复
withstudy 2002-04-09
VB5作多线程可以,但到了VB6,在IDE环境下没问题,一编译成EXE就完了,不知道是怎么回事,我现在用多线程没办法,只好用VB5,特别的不顺手。
回复
wkoji 2002-04-09
非常感谢Shawls(小山(立志做一个平庸的公务员),我觉得你说的这个方法很有效,我现在就去试试。成功就回来给分。
回复
shawls 2002-04-09
FetchOptions 属性 (RDS)


指示异步获取的类型。

设置和返回值

设置或返回如下值。

常量 说明
AdcFetchUpFront 控件返回到应用程序前将获取 Recordset 的所有记录。在取到完整的 Recordset 之后才允许应用程序使用它进行其他操作。
AdcFetchBackground 只要获取首批记录,控件即可返回应用程序。对试图访问未在首批获取的记录而进行的后续读取将延迟到已实际获取待查的记录,此时控件将返回应用程序。
AdcFetchAsync 默认值。后台取记录时,控件将立即返回应用程序。如果应用程序试图读取尚未获取的记录,则它将读取最接近所发现记录的记录,并且控件会立即返回,以表明已到达 Recordset 的当前的尾部。例如,对 MoveLast 的调用将使当前记录位置移动到实际获取的上一条记录,即使已有其他记录会继续充填 Recordset。


注意 使用这些常量的每个客户端可执行文件必须为这些常量提供声明。可以从位于 C:\Program Files\Common Files\System\MSADC 文件夹的文件 Adcvbs.inc 中剪切并粘贴所需的常量声明。

说明

在 Web 应用程序中,通常使用 adcFetchAsync(默认值),因为该值提供更佳的性能。在编译的客户端应用程序中,通常使用 adcFetchBackground。

Cancel 方法


取消执行挂起的异步 Execute 或 Open 方法的调用。

语法

object.Cancel

说明

使用 Cancel 方法终止执行异步 Execute 或 Open 方法调用(即通过 adAsyncConnect、adAsyncExecute 或 adAsyncFetch 选项调用该方法)。如果在试图终止的方法中没有使用 adAsyncExecute,则 Cancel 将返回运行时错误。

下表显示在特定类型对象上使用 Cancel 方法时将终止的任务。

如果对象为 将终止对该方法的上一次异步调用
Command Execute
Connection Execute 或 Open
Recordset Open

AdoEnums.AdcPropAsyncThreadPriority.*


包 com.ms.wfc.data

主题 对于 RDS Recordset 对象,指定获取数据的异步线程的执行优先级。通过记录集的“Background Thread Priority”动态属性使用这些常量。

前缀 adPriority

声明 ADCPROP_ASYNCTHREADPRIORITY_ENUM

常量 值
LOWEST 1
BELOWNORMAL 2
NORMAL 3
ABOVENORMAL 4
HIGHEST 5

回复
shawls 2002-04-09
ADO 事件模型和异步操作


ADO 事件模型支持某些同步和异步的 ADO 操作,在这些操作开始之前或完成之后会产生“事件”(即通知)。事件实际上是对在应用程序中定义的事件处理程序例程的调用。

在操作开始之前被调用的事件处理程序允许您检查或修改操作参数,然后取消操作或让它完成。

由于 ADO 支持异步操作,在操作完成之后被调用的事件处理程序尤其重要。例如,启动异步 Recordset.Open 操作的应用程序在操作结束时会接收到执行完成事件的通知。

有关 ADO 中事件的详细信息,请参阅如下主题:

ADO 事件处理程序总结


事件类型


事件参数


事件处理程序如何共同工作


ADO/WFC 中的 ADO 事件


不同语言的 ADO 事件实例

ExecuteOptions 属性 (RDS)


指示是否启用异步执行。

设置和返回值

设置或返回如下值。

常量 说明
AdcExecSync 同步执行 Recordset 的下一个刷新操作。
AdcExecAsync 默认值。异步执行 Recordset 的下一个刷新操作。


注意 使用这些常量的每个客户端的可执行文件必须为其提供声明。可以从位于 C:\Program Files\Common Files\System\MSADC 文件夹的文件 Adcvbs.inc 中剪切并粘贴常量声明。

说明

如果将 ExecuteOptions 设置为 adcExecAsync,则对 RDS.DataControl 对象的 Recordset 上异步执行下一个 Refresh 调用。

当正在执行可能更改 RDS.DataControl 对象中 Recordset 的另一个异步操作时,如果试图调用 Reset、Refresh、SubmitChanges、CancelUpdate 或 Recordset,将产生错误。

如果在异步操作中发生错误,RDS.DataControl 对象的 ReadyState 值将由 adcReadyStateLoaded 更改为 adcReadyStateComplete,而 Recordset 属性的值仍保持为 Nothing。

Options 可选,长整型值,用于指示提供者如何计算 Source 参数(如果它代表的不是 Command 对象),或从以前保存 Recordset 的文件中恢复 Recordset。可为下列常量之一(参见 CommandType 属性可获得该列表中前五个常量的详细说明)。

常量 说明
adCmdText 指示提供者应该将 Source 作为命令的文本定义来计算。
adCmdTable 指示 ADO 生成 SQL 查询以便从在 Source 中命名的表中返回所有行。
adCmdTableDirect 指示提供者更改从在 Source 中命名的表中返回所有行。
adCmdStoredProc 指示提供者应该将 Source 视为存储过程。
adCmdUnknown 指示 Source 参数中的命令类型为未知。
adCmdFile 指示应从在 Source 中命名的文件中恢复保留(保存的)Recordset。
adAsyncExecute 指示应异步执行 Source。
adAsyncFetch 指示在提取 Initial Fetch Size 属性中指定的初始数量后,应该异步提取所有剩余的行。如果所需的行尚未提取,主要的线程将被堵塞直到行重新可用。
adAsyncFetchNonBlocking 指示主要线程在提取期间从未堵塞。如果所请求的行尚未提取,当前行自动移到文件末尾。


说明

使用 Recordset 对象的 Open 方法可打开代表基本表、查询结果或者以前保存的 Recordset 中记录的游标。

使用可选的 Source 参数指定使用下列内容之一的数据源:Command 对象变量、SQL 语句、存储过程、表名或完整的文件路径名
回复
shawls 2002-04-09

有没有搞错?

难道一定要用多线程读取数据吗?

ado有异步数据访问的功能!不能使用他吗?


有个时候需要换一种方法向!
回复
gump2000 2002-04-09
'Using the CreateThread function in Visual Basic
'is very risky! VB5 is 'kinda' stable, but VB6
'applications will probably crash when you
'use the CreateThread function.
回复
gump2000 2002-04-09
'Using the CreateThread function in Visual Basic
'is very risky! VB5 is 'kinda' stable, but VB6
'applications will probably crash when you
'use the CreateThread function.
回复
wkoji 2002-04-09
请问ltpao(啊炮),你自己做过VB的多线程吗?下面的情况发生过吗?
我今天下载了一个事例,结果跟他说的一模一样,确实编译后的文件运行就报错
withstudy(王永丰) ( ) 信誉:100 2002-04-09 08:46:00 得分:0
VB5作多线程可以,但到了VB6,在IDE环境下没问题,一编译成EXE就完了,不知道是怎么回事,我现在用多线程没办法,只好用VB5,特别的不顺手。
回复
dance_code 2002-04-08
报道
回复
wkoji 2002-04-08
哦,那么可能是我这里网络有问题吧
那么我待会再试试。
文件大吗?,假如不大,能麻烦你发到我的邮箱里去吗?
wkoji@163.net
回复
发帖
控件与界面
创建于2007-09-28

586

社区成员

PowerBuilder 控件与界面
申请成为版主
帖子事件
创建了帖子
2002-04-08 02:23
社区公告
暂无公告