user3000 发表于 2011-7-27 07:34:21

如何做才能提高读取ACCESS数据库数据的速度?(已解决)

本帖最后由 user3000 于 2011-7-28 20:59 编辑

最近编写个网吧自用的游戏菜单,已经接近尾声,但发现了一个大问题:
直读网维数据库的游戏数据时,游戏菜单启动相当的慢,需要30秒到40多秒钟!
网维用的是access数据库,读取用的是论坛的自定义函数:_accessQueryLike
也试过开新程序,仅仅读取各分类的游戏数据到(内存)数组中,总共时间也要10秒左右!

但试过深蓝的网吧游戏菜单,如果是直读网维,启动并加载游戏数据也就是一两秒钟内的事啊?
如何做才能提高读取ACCESS数据库数据的速度?
传说中的“多进程”代替“多线程”?
请列位指条明路吧!

该问题已解决,但我无法选择到分类“已解决”?

supersp 发表于 2011-7-27 20:18:05

我发现那个UDF,每一次ACCESS操作都执行一次 _DBOPEN,不慢才有鬼。

user3000 发表于 2011-7-28 03:34:03

我发现那个UDF,每一次ACCESS操作都执行一次,不慢才有鬼。
supersp 发表于 2011-7-27 20:18 http://www.autoitx.com/images/common/back.gif


   您的意思修改一下,只运行一次 _DBOPEN会大大提升效率不成?

清风飘飘 发表于 2011-7-28 08:35:45

$addfld = ObjCreate("ADODB.Connection")
            $addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" &$mdb_data_path & ";Jet Oledb:Database Password=" & $mdb_data_pwd)
         $RS =ObjCreate("ADODB.Recordset")
          $RS.ActiveConnection = $addfld
            $RS.Open ("Select "&$t & " From " & $adTable )   ;$t : 表示一个连接$adtable :表示的是这个表的名称
         while Not $RS.eof And Not $RS.bof
         if @error =1 Then ExitLoop
            GUICtrlCreateListViewItem ( $RS.Fields (0).value&"|"& $RS.Fields (1).value&"|"& $RS.Fields (2).value&"|"& $RS.Fields (3).value&"|"& $RS.Fields (4).value&"|"& $RS.Fields (5).value&"|"& $RS.Fields (6).value&"|"& $RS.Fields (7).value&"|"& $RS.Fields (8).value&"|"& $RS.Fields (9).value&"|"& $RS.Fields (10).value,$ListView1 )
            ; MsgBox(0, "", $RS.Fields (1).value);显示表第一个数据
             $rs.movenext
            WEnd
               $rs.close
            $addfld.Close

user3000 发表于 2011-7-28 20:48:54

今天研究了半天的UDF,把它修改一下,已经达到自己的目的。类似4楼的做法吧。
就是按自己实际需要提取相应的字段值,而不是遍历全部的字段。
还可以把字段值重新排序后再输出!比如,返回值设为:$RS.Fields (5).value & $RS.Fields (0).value

感谢2楼给予的“妙想”和思路!
谢谢4楼的朋友也来帮忙!尽管我是现在才有时间并看到这个回复的!

user3000 发表于 2011-7-28 20:52:35

最的发表心得:

对于我们这样的菜鸟的启示:不要过于迷信UDF的功能!

My2009 发表于 2011-11-18 15:42:21

学习了,也遇到过这样的问题

qsy666888 发表于 2014-5-10 16:48:35

学习了,也遇到过这样的问题
页: [1]
查看完整版本: 如何做才能提高读取ACCESS数据库数据的速度?(已解决)