向高手请教

wx263 2000-04-25 06:58:00
请教如何在访问大数据库时还可以保证系统主程序继续运行?
本人设计一程序, 主窗体中使用时钟持续运行,但如果在访问数据库时,程序暂停,特别在访问大数据库和使用复杂运算查询时特别明显,但此程序要保证主时钟始终持续运行,是否使用多线程可解决此问题,没用过,心里没底,如果用多线程该如何do呢???

另请教本人在使用vb中listview控件时, 使用时钟对listview中的图标进行更新但是, 每次更新时都会闪动不知有什么高招???
80分俸上
...全文
146 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
major2 2000-04-25
  • 打赏
  • 举报
回复
你要的效果用数据库的异步访问方式就可以实现,不过需要数据库引擎能支持异步访问。一般情况下,如果你用的是SQL Server之类的东西是能支持的,如果你用的是ACCESS这些准数据库引擎那就难讲了,我反正是没用过ACCESS,但是我在SQL SERVER里用过。在建立数据连接对象是,ADO.CONNECTION对象有一个属性是设置异步还是同步方式的,如果你的数据提供者不支持异步方式,程序会出错,不过可以用OLE DB FOR ODBC试试。如果你的查询语句特别复杂,数据源记录数特别大的话,最好用存储过程来取数据,那样效果最好。一方面查询速度快,二方面能支持客户端的异步刷新。有些软件里,在一个GRID显示数据时,用了异步方式,效果就是一边记录数还在跳动,一边已经把前面查询到的数据显示在GRID里面了。在查询还在执行的同时你已经可以做其他事情了。
至于第二个问题,闪烁是控件本身的毛病,如果要把采样频率设得比较高的话是不能彻底消除的。你可以这样做,在刷新前先把当前所有图标都清除掉,然后再一次全画上去,这样虽然刷新速度慢了,但是闪烁可能会好一些。就象资源管理器里面,如果你在目录栏点了某个很庞大的文件夹,象windows这样的,它的LISTVIEW里面的项目更新就是先把当前所有项目清除掉,然后把windows目录下所有对象一次画进去,虽然速度比较慢,但是感观上的效果可能更好一些。
major2 2000-04-25
  • 打赏
  • 举报
回复
涉及到异步访问数据库的问题,用不着多线程,使用异步方式就可以达到你要的效果,不过要数据库引擎本身支持。如果你用的数据库是SQL SERVER之类的东西,那么应该是支持异步访问的,在数据连接中设置连接已异步方式进行数据访问即可。如果你是用的ACCESS,FOXPRO等小打小闹的准数据库,那么用OLE DB FOR ODBC建立ADO 连接,可能也能支持异步方式,不过我可不清楚,因为我没有用过这类数据库。数据异步访问的具体情况也比较复杂,每种不同的数据库都有点小异,不过大同还是存在的,你可以查一下数据库的相关资料。还有就是访问的数据源很大,很复杂,需要大量运算的情况最好是用存储过程来实现,存储过程也是支持异步方式的,而且我觉得是效果最好的。
二、对LISTVIEW中的图标进行刷新的问题,其实是空间本身的毛病,也没有更好办法。我想你在刷新前先把当前所有图标清除掉,然后再一次性画上去,这样把刷新的速度降下来,可能感观上能觉得好一些,就象资源管理器里,如果你选择了一个很庞大的文件夹,它的LIST VIEW部分的刷新就是这样的,虽然比较慢,但没有闪烁感,可能会更好。

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧