| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1553 人关注过本帖
标题:实践:关系数据库的规范化
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
這樣數組的容量超過要求了,浪費。萬一表的記錄數小於字段數呢?在表是空的時候,RECCOUNT()爲零,定義數組元素數爲零,試試行不行?這也是錯誤。

再有,RECCOUNT()在SET DELETED ON|OFF 時,會有不同的結果,你測試一下就知道了。

[ 本帖最后由 TonyDeng 于 2011-7-10 20:50 编辑 ]

授人以渔,不授人以鱼。
2011-07-10 20:49
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
將一條記錄按字段儲存爲數組,有現成的指令,SCATTER。

授人以渔,不授人以鱼。
2011-07-10 20:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
可以這樣寫:
程序代码:
USE cjb IN 0                                && 在新工作區打開表,以免覆蓋當前工作區已打開的表
C = FCOUNT("cjb")                           && 取指定別名的表(視圖)的字段數目
DIMENSION Arra[C]
FOR n = 1 TO C
    ARRA[n] = FIELD(n, "cjb")               && 取指定別名的表(視圖)指定字段序號的字段値
NEXT


這種用法,當前工作區不變,也可以避免忘記切換工作區時取錯數據庫的問題。

授人以渔,不授人以鱼。
2011-07-10 21:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
可以這樣寫:
程序代码:
USE cjb IN 0                                && 在新工作區打開表,以免覆蓋當前工作區已打開的表
C = FCOUNT("cjb")                           && 取指定別名的表(視圖)的字段數目
DIMENSION Arra[C]                           && 直接DIMENSION Arra[PCOUNT("cjb")]也可以的
FOR n = 1 TO C
    ARRA[n] = FIELD(n, "cjb")               && 取指定別名的表(視圖)指定字段序號的字段名,取字段値可用EVALUATE(FIELD(n, "cjb"))
NEXT


這種用法,當前工作區不變,也可以避免忘記切換工作區時取錯數據庫的問題。

[ 本帖最后由 TonyDeng 于 2011-7-10 21:13 编辑 ]

授人以渔,不授人以鱼。
2011-07-10 21:07
lyxc34
Rank: 2
等 级:论坛游民
帖 子:139
专家分:50
注 册:2011-7-3
收藏
得分:0 
我晕死,和变量没半毛钱关系,我定义的数组名和最后赋值的数组名差一个字母。数组习惯打ARRAY了,结果定义的是ARRA,赋值用的ARR。
数组的容量刚才看帮助说只受内存的限制。刚才试了,不能定义没有元素的数组。
RECC()在SET DELETED ON|OFF 的时候应该就是一个不记录有删除标记一个记录有删除标记的吧。没试过,呆会儿验证一下。
我这里是要将字段名赋值给数组,才用这个循环,SCATTER刚才我看了,是取值用的,这和SELECT-FROM-INTO ARRAY是一样的吧。
2011-07-10 21:10
lyxc34
Rank: 2
等 级:论坛游民
帖 子:139
专家分:50
注 册:2011-7-3
收藏
得分:0 
系统默认的工作区到底是0还是1?帮助里面只写了前10个工作区分别用A到J表示。
2011-07-10 21:18
lyxc34
Rank: 2
等 级:论坛游民
帖 子:139
专家分:50
注 册:2011-7-3
收藏
得分:0 
你这一解释,我对ARRAY、FIELD()、AFIELD()、FCOUNT()、RECCOUNT()的定义认识又多些了,HOHO!3Q!
2011-07-10 21:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
RECCOUNT()不受SET DELETE 的影響,即使你SET DELETED ON,它也是返回表中的總記錄數,包含被標記爲刪除的記錄在內,有時候,這不是我們希望的結果。
同時,它也不受SET FILTER的影響。
歸根結底,這個數不是計算出來的,它其實沒實際統計數據庫中有多少記錄,而是從數據庫文件頭中拿答案,所以速度飛快,但很容易被誤用。

授人以渔,不授人以鱼。
2011-07-10 21:24
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用lyxc34在2011-7-10 21:18:20的发言:

系统默认的工作区到底是0还是1?帮助里面只写了前10个工作区分别用A到J表示。


10個工作區的限制是舊式的,dBASE時代的概念了,VFP可同時打開64K個表。工作區選0是讓VFP自己分配,它將取回可用的最小序號的工作區號碼給你,但你不需要理這個數是多少,用別名引用工作區就可以了。SELECT cjb比SELECT 2好用得多。

授人以渔,不授人以鱼。
2011-07-10 21:36
lyxc34
Rank: 2
等 级:论坛游民
帖 子:139
专家分:50
注 册:2011-7-3
收藏
得分:0 
OK,了解了,也就是只要你喜欢,你可以一次性打开100个表,然后要用的时候用SELECT 别名直接用。
2011-07-10 21:45
快速回复:实践:关系数据库的规范化
数据加载中...
 
   



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

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