关于数据源选择的考虑
刚开始接触狐表,直接用access作为数据源,编写了生产管理软件,现在已经用了2年,数据库接近300M,现在感觉统计数据满了很多,其中一个合同报表,需要五大车间年初至今(一直到全年)的数据,并且要求合同完成多少,未完成多少,都要计算出来,累计时间最早15分钟统计完,之后调整了统计代码统计时间还需要50‘’---90‘’之间。同事查询数据时加载也慢。用了几天时间,改用sql2005作为数据源,经过调整(时间#改为',值为true和false的列改为1和0,以及条件语句等都要改过来,数据表导出导入等工作),今天全部电脑调试完毕,速度比access快的惊人。在所有电脑均统计了合同报表,经使用统计速度均3秒内完成。查询速度也非常快,以前更新一下目录树也需要5-6秒甚至更多的时间,现在基本不存在等待情况。
建议新手根据自己的需求,尽量开始就用sql作为数据库,以免速度也来越慢,以后更换虽然简单,但是所有的报表,日期、true、false、iif等都要调整,工作量也很大,改了这边,忘了那边。
另外,统计数据是可能用到辅助表,需要在辅助表填充数据
如用下列代码
dim f As New Filler
f.SourceTable = DataTables("订单") '指定数据来源
f.SourceCols = "产品,客户1" '指定数据来源列
f.DataTable = DataTables("统计") '指定数据接收表
f.DataCols = "产品,客户" '指定数据接收列
f.Fill() '填充数据
f.SourceTable = DataTables("订单") '指定数据来源
f.SourceCols = "产品,客户2" '指定数据来源列
f.DataTable = DataTables("统计") '指定数据接收表
f.DataCols = "产品,客户" '指定数据接收列
f.Fill() '填充数据
f.SourceTable = DataTables("订单") '指定数据来源
f.SourceCols = "产品,客户3" '指定数据来源列
f.DataTable = DataTables("统计") '指定数据接收表
f.DataCols = "产品,客户" '指定数据接收列
f.Fill() '填充数据
.....
.....
.......
但是,当数据量较大,有时达到100M以上的数据量时,或许数据更多,上面代码或许慢了许多
碰到这种情况,我才用了类似下列代码先导出,再倒入
'导出当天订单
Dim ex As New Exporter
ex.SourceTableName = "订单"
ex.FilePath = "c:\temp\gd.mdb"
ex.Filter = "日期 = #" & Date.Today & "#"
If FileSys.FileExists(ex.FilePath) Then '如果目标文件已经存在
FileSys.DeleteFile(ex.FilePath) '则删除之
End If
ex.Export()
For Each File As String In Filesys.GetFiles("c:\temp")
If File.EndsWith(".mdb") '如果后缀名是mdb,说明此文件是access格式
Dim mg As New Merger
mg.SourcePath = file
mg.SourceTableName = "订单"
mg.DataTableName = "订单"
mg.Merge()
Filesys.DeleteFile(File) '合并后删除文件
End If
Next
....
....
同样的数据量,后者速度随着数据量的增多,效果越来越明显快,不知道大家是否有同感
当然上面方法不一定最好,但是速度提高了
不知道大家还有更好的方法提供一下。
最后感谢狐表,感谢狐表团队提供了这么一个好的数据管理软件开发平台。
同时感谢帮助过我的所有老师。