标题:介绍一个vfp 数据库集的例子,期望对 vfp 编程有所参考。
只看楼主
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
结帖率:100%
已结贴  问题点数:20 回复次数:6 
介绍一个vfp 数据库集的例子,期望对 vfp 编程有所参考。
  介绍一个vfp 数据库集的例子,期望对 vfp 编程有所参考。
  这是一个商品出库表的库集 属于日期型库集, 日常使用时,让程序自动打开当天的表,
  再进行各种数据操作

** 创建数据库集.
** 下列程序,将在 e 盘上创建一个当年的数据库集,可以把他放在服务器上,作为网络共享库集
** 创建的库集(文件夹),也可以进一步手工继续复制
 
   close all
   set safety off
   datt=dtos(date())
   for m=1 to 12
       cm=alltrim(str(m))
       if m<10
          cm='0'+alltrim(str(m))
       endif
       clj="e:\kj_20\y"+substr(datt,1,4)+"\m"+cm && 此句中的参数更改后,可以成为不同的文件夹
       erase &clj\*.*
       if.not.dire("&clj")
          mkdir &clj
       endif   
       if.not.file("&clj\ck.dbc")
          create data &clj\ck.dbc
       endif
       open data &clj\ck
       set data to &clj\ck
       for n=1 to 31
           cn=alltrim(str(n))
           if n<10
              cn='0'+alltrim(str(n))
           endif
           cljb=clj+"\ck"+cn
           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))
 endfor
 endfor
 close all
 *********   
搜索更多相关主题的帖子: 例子 期望 数据库 vfp 
2010-02-28 01:22
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
得分:0 
以下是引用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 表有时候被损坏,导致了很多编程人员转向了其他语言。因为一张重要的表损坏,
     可能是致命的损失!数据库集的表如果有损坏,最多是一张单表,不至于产生致命后果。但是,本人还是
     强烈建议您:同时建立两套数据库集。让程序自动执行二次填充。另一套最好放在另外的盘符上,
     或放在另一台微机上。数据库集,是一个很好的大记事本。假如您现在正在使用的数据库,
     是采用了单表、大容量存放方式,也强烈建议您,做一套数据库集,作为您的备份库,做到有备无患。
     
     望高手多指点 !
     




     
     




2010-03-01 21:02
bscdcs
Rank: 2
等 级:论坛游民
帖 子:12
专家分:50
注 册:2010-2-8
得分:10 
设想很好,数据再加密就更好了。
2010-03-02 08:07
茵梦湖
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:31
帖 子:545
专家分:2180
注 册:2009-4-25
得分:10 
           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))

================================================
很不错~~~但个人觉得, 从通用性考虑:
 
数量, 应取小数点2-3位~~因为有些是以"箱","袋"之类作计量单位,而规格又是(每箱) 1*10包, (每袋)1*50kg之类的, 发贷时, 可能会发1箱中的5包之类, 这就要用到小数~~~
 
单价, 一般取小数点的3-4位, 甚至5-6位, 主要是配合税票和普票的单价转换~~~
 
领购单位, 似应加个(客户/领购单位)代码之类, 因为单位/客户经常有改名称的, 加个代码, 无论单位名称如何变, 代码是不变的, 这样便于应收帐款, 报表之类的统计~~~
 
呵呵,只是从通用性考虑的个人观点, 仅供参考, 说错勿怪~~~~~还有, 许多公司的商品计量全是取整, 不用税票的, 另当别论~~~

  
 



2010-03-02 13:59
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
得分:0 
以下是引用qingfameng在2010-3-1 21:02:07的发言:

(接续)数据库集的使用

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)
     ...
1、谢谢2位高手的鼓舞!非常感谢!数据库集,是一个文件夹形式存在,对于文件夹的种种理想加密,
   本人也处在学习和探讨之中,还望各位高手多多指教。
2、对于库集的创建,可以根据自己的编程需要,能够灵活创建。在上面的举例中,如果改变 csjk= ..
   的句子中,右边的路径参数,则创建出不同的文件夹内的库集表。如果改变 create table ..
   中,标示表的字段名称和属性的部分,将其变成您的实际所需要的表结构字段,则会创建出完全符合
   个人所用的库集。
3、数据库集,实际使用性很强的。尽管使用中,可能比起直接使用单表稍麻烦一点,但是,他的实际作用,
   带来的效果,确是非常值得的。今后,本人会继续和大家共同探讨这个问题的,
   期望各位高手继续多加指点吧!

[ 本帖最后由 qingfameng 于 2010-3-3 01:54 编辑 ]
2010-03-03 01:48
ls_y041
Rank: 2
等 级:论坛游民
威 望:1
帖 子:157
专家分:35
注 册:2005-9-29
得分:0 
这样方法实用性会不会不好?
2014-05-01 07:21
ILoveVFD
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:218
专家分:147
注 册:2015-5-2
得分:0 
不停建数据表的方式,是否可靠? 明明数据库这么大的空间不使用,非要一个个建业务表,不理解?
2015-05-03 11:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-298226-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.745603 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved