主题:[请教] 测试字段宽度和小数位数的函数
北京惬意
[专家分:1330] 发布于 2009-03-05 10:39:00
打开一个表,已知某字段是“N”型,
想知道其宽度和小数位数用什么函数?
谢谢!
回复列表 (共30个回复)
11 楼
北京惬意 [专家分:1330] 发布于 2009-03-06 10:45:00
[quote]拷贝你的表的数据结构到临时表,里边就有你要的东东在 field_dec 字段中。下面的例子只拷贝一个字段。
use 我的表
copy stru exte to 临时表 field 要检查的字段
use 临时表
? field_name
? field_len && 字段宽度
? field_dec && 小数位长
? field_type && 字段类型
brow
[/quote]
乌鸦弟的解决方案比我的用ADIR()函数来解决要好,也许是目前最佳方案。
但不排除还有更好的解决方案,保留此帖,继续征求意见。
十分感谢乌鸦弟,老兄我在东北长春感谢你!
12 楼
0901chang [专家分:10660] 发布于 2009-03-06 12:04:00
乌鸦用的是笨办法,ADIR()函数是内存操作,速度快。
13 楼
CCB2000 [专家分:690] 发布于 2009-03-06 12:26:00
老种子,锲而不舍,努力探索,精神可嘉!
找到另外一个方法(关键就是最后几句):
*PROC flddec
PARAMETER m.q_fld,m.q_alias
* m.q_fld =
* m.q_alias =
* 参数:字段、工作区
* 返回:字段小数位数
IF TYPE("m.q_fld")#"C"
m.q_fld=""
ENDI
m.q_fld=UPPE(ALLTRIM(m.q_fld))
IF TYPE("m.q_alias")#"C"
m.q_alias=""
ENDI
m.q_alias=UPPE(ALLTRIM(m.q_alias))
IF ALLTRIM(m.q_alias)==""
m.q_alias=ALIAS()
ENDI
IF !USED(m.q_alias).OR.FSIZE(m.q_fld,m.q_alias)=0
RETU 0
ENDI
IF TYPE(m.q_alias+"->"+m.q_fld)#"N"
RETU 0
ENDI
PRIVATE m.q_exp
m.q_exp=""
TEXT TO m.q_exp TEXTMERGE NOSHOW
<<EVAL(m.q_alias+"."+m.q_fld)>>
ENDTEXT
IF AT(".",m.q_exp)>0
RETU LEN(SUBS(m.q_exp,AT(".",m.q_exp)+1))
ELSE
RETU 0
ENDI
* END OF PROC FLDDEC.
14 楼
dkfdtf [专家分:90] 发布于 2009-03-06 13:51:00
用得着那么复杂吗?两行代码就成
Afields(laFlds, '表名')
? laFlds[Ascan(laFlds, '字段名', -1, -1, 1, 1+2+4+8), 3], ;
laFlds[Ascan(laFlds, '字段名', -1, -1, 1, 1+2+4+8), 4]
15 楼
北京惬意 [专家分:1330] 发布于 2009-03-06 14:05:00
[quote]乌鸦用的是笨办法,ADIR()函数是内存操作,速度快。
涌车兄,我的老师春节期间专程从鞍山来看我,他用自己的专利产品混成了一个小老板,动员乌鸦去鞍山给他打工,年薪10W,到目前为止,我还没有接受他的邀请,我去年的软件收入是900元。
二十多年前,我们俩是黄金搭档,当时共军的防空武器系统,我们俩想怎么折腾就怎么折腾。[/quote]
告诉乌鸦弟一个好消息,我的商务软件(进销存软件)从08年10月到现在,东北这里卖了13万元,去年同期卖了8万,前年同期卖了4万。上升趋势明显。
当然东北这里几年来就是种子销售前这一季咱们卖软件,其它季节其它行业还没有开展起来,所以也就是全年销售额了。
广西北海和河浦到是全年和各行业销售,特别是餐饮业用的多,但一年销售额也只有几万。
16 楼
北京惬意 [专家分:1330] 发布于 2009-03-06 14:27:00
[quote]用得着那么复杂吗?两行代码就成
Afields(laFlds, '表名')
? laFlds[Ascan(laFlds, '字段名', -1, -1, 1, 1+2+4+8), 3], ;
laFlds[Ascan(laFlds, '字段名', -1, -1, 1, 1+2+4+8), 4]
[/quote]
经过测试,14楼是理想办法。
向14楼学习!向14楼致敬!
17 楼
北京惬意 [专家分:1330] 发布于 2009-03-06 15:11:00
看书后对14楼的做法理解如下,供各位共享。
Afields(laFlds, '表名') &&用Afields()将表的结构赋入数组laFlds,表在当前区时可以省略'表名'。
? laFlds[Ascan(laFlds, '字段名', -1, -1, 1, 1+2+4+8), 3]
? laFlds[Ascan(laFlds, '字段名', -1, -1, 1, 1+2+4+8), 4]
* Ascan()查询'字段名'在数组中的位置。
* 其中-1, -1, 1的第一个-1是从开始查询,第二个-1是全部查询,第三个1是在第一列查询。
* 其中的1+2+4+8是查询方法,1是不区分大小写,2是同以前的版本兼容,4是不进行精确查找,8是位置变成行号。
?laFlds(某行,3)&&显示数组laFlds某行3列的字段宽度。
?laFlds(某行,4)&&显示数组laFlds某行4列的小数位数。
14楼,实乃高人也![em28][em28][em28]
18 楼
cbl518 [专家分:57140] 发布于 2009-03-06 20:27:00
n2=已知“N”型某字段
?"共用小数位:",LEN(TRANSFORM(IIF(n2%1=0,n2+0.1,n2%1)))-2
19 楼
cbl518 [专家分:57140] 发布于 2009-03-06 20:29:00
老兄:对不起!!!
实在太忙,今天才看见你的帖子,
谢谢你能记住我!!!
20 楼
北京惬意 [专家分:1330] 发布于 2009-03-06 21:29:00
[quote]老兄:对不起!!!
实在太忙,今天才看见你的帖子,
谢谢你能记住我!!![/quote]
CBL518大师忘了还得了,估计用不了多少天我就能转到你那里了,早点准备好酒呀。[em45]
我来回复