以下是引用qingfameng在2010-2-28 01:22:00的发言:
介绍一个vfp 数据库集的例子,期望对 vfp 编程有所参考。
这是一个商品出库表的库集 属于日期型库集, 日常使用时,让程序自动打开当天的表,
再进行各种数据操作
** 创建数据库集.
** 下列程序,将在 e 盘上创建 ...
(接续)数据库集的使用
1、 当使用数据库集时,使用如下语句自动打开一张表.
datt=dtos(date())
csjk="e:\kj_20\y"+substr(datt,1,4)+"\m"+substr(datt,5,2)+"\ck"
csjb="ck"+substr(datt,7,2)
open data &csjk
use &csjb
即可操作这张表.
更改句中 csjk 的参数.可打开库集中的任意一张表
2、定期内商品出库明细记录汇总。即定期内商品出库明细记录表。
设有2个日期 trq1,trq2 日期时间型.并且 trq2>=trq1,符合库集的时间范围规定
trq1,trq2 可以通过日历控件得到。为临时参数,之后,执行下面语句
close all
set safety off
create table cljb (序号 n(10),编码 c(10),拼音码 c(20),品名 c(40),规格 c(30),单位 c(10),;
数量 n(14),单价 n(16,2),金额 n(18,2),出库日期 t,领购单位 c(30),收货人 c(20),开单人 c(20))
sele 1
use cljb
trq1=ctod(substr(dtos(trq1),5,2)+"/"+substr(dtos(trq1),7,2)+"/"+substr(dtos(trq1),3,2))
trq2=ctod(substr(dtos(trq2),5,2)+"/"+substr(dtos(trq2),7,2)+"/"+substr(dtos(trq2),3,2))
ttrq=trq1
do while trq1=<trq2
crq1=dtos(trq1)
csjk="e:\kj_20\y"+substr(crq1,1,4)+"\m"+substr(crq1,5,2)+"\ck"
csjb="ck"+substr(crq1,7,2)
open data &csjk
sele 2
use &csjb share
go top
if.not.eof()
sele cljb
append from &csjb
endif
trq1=trq1+1
enddo
trq1=ttrq
sele cljb
brow
close all
return
** 住:临时表 cljb 也可以放到表单中,作显示和打印用。
3、 定期内商品金额汇总. 可以利用以上结果,执行一句代码:
select 字段1,字段2,.. ,sum(金额) as 金额 from cljb into cursor hzb group by 字段1,字段2,..
得到一个临时表 hzb,为定期内商品金额汇总表。可以将 hzb 放到表单中,作显示和打印用。
4、 如果将盘符 e:\" 换成服务器的 ip 地址,比如: 192.168.0.1 等,数据库集可以成为 C/S 结构的网络
共享库集.特别是局域网内,他将以超大量存放,始终快速方式运行,使用者不必担心巨量存放会产生的
种种问题。
5、 因为数据库集,是相同结构相同字段的单表集合,在实际使用中,每张单表内存放记录数量不会太多。
比如例子中:只存放当天的商品出库明细。为了进一步提高查询速度,有时候,在库集的某个文件夹内,
比如例子中,在年份文件夹内,放入一张引导表,字段名有:序号,出库日期,领购单位,收货人等,
此表的一条记录,对应一张完整的出库单。在执行条件查询时,首先从其中寻找符合条件的记录,
以这些记录,依次查询库集之中的对应表。例如:查询某个领购单位,在一定时间内的领购物品情况。
根据引导表,自然会很容易的查找到库集中的有关表,并执行显示、合并、汇总等功能。由于这样的查询,
只是查询相关的表,无关的表会忽略不查,所以,查询速度会很快的。他与整个库集的存放量,
几乎没有多大关系。伴随查找条件的增多,他对应的库集表会越少。但是,在巨量单表内直接查记录,
由于条件越多,无关的数据越多,而且又增加了查询频率,导致查询速度越加缓慢。对比之下,
两种查询方式的效率正好相反。
6、 防止表损坏的措施。vfp 表有时候被损坏,导致了很多编程人员转向了其他语言。因为一张重要的表损坏,
可能是致命的损失!数据库集的表如果有损坏,最多是一张单表,不至于产生致命后果。但是,本人还是
强烈建议您:同时建立两套数据库集。让程序自动执行二次填充。另一套最好放在另外的盘符上,
或放在另一台微机上。数据库集,是一个很好的大记事本。假如您现在正在使用的数据库,
是采用了单表、大容量存放方式,也强烈建议您,做一套数据库集,作为您的备份库,做到有备无患。
望高手多指点 !