回 帖 发 新 帖 刷新版面

主题:[请教] 测试字段宽度和小数位数的函数

打开一个表,已知某字段是“N”型,
想知道其宽度和小数位数用什么函数?
谢谢!

回复列表 (共30个回复)

11 楼

[quote]拷贝你的表的数据结构到临时表,里边就有你要的东东在 field_dec  字段中。下面的例子只拷贝一个字段。

use 我的表
copy stru exte to 临时表 field 要检查的字段
use 临时表
? field_name
? field_len  && 字段宽度
? field_dec  && 小数位长
? field_type && 字段类型
brow
[/quote]
乌鸦弟的解决方案比我的用ADIR()函数来解决要好,也许是目前最佳方案。
但不排除还有更好的解决方案,保留此帖,继续征求意见。
十分感谢乌鸦弟,老兄我在东北长春感谢你!

12 楼

乌鸦用的是笨办法,ADIR()函数是内存操作,速度快。

13 楼

老种子,锲而不舍,努力探索,精神可嘉!

找到另外一个方法(关键就是最后几句):

*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 楼

用得着那么复杂吗?两行代码就成

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 楼

[quote]乌鸦用的是笨办法,ADIR()函数是内存操作,速度快。

涌车兄,我的老师春节期间专程从鞍山来看我,他用自己的专利产品混成了一个小老板,动员乌鸦去鞍山给他打工,年薪10W,到目前为止,我还没有接受他的邀请,我去年的软件收入是900元。
二十多年前,我们俩是黄金搭档,当时共军的防空武器系统,我们俩想怎么折腾就怎么折腾。[/quote]

告诉乌鸦弟一个好消息,我的商务软件(进销存软件)从08年10月到现在,东北这里卖了13万元,去年同期卖了8万,前年同期卖了4万。上升趋势明显。
当然东北这里几年来就是种子销售前这一季咱们卖软件,其它季节其它行业还没有开展起来,所以也就是全年销售额了。
广西北海和河浦到是全年和各行业销售,特别是餐饮业用的多,但一年销售额也只有几万。

16 楼

[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 楼

看书后对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 楼

n2=已知“N”型某字段
?"共用小数位:",LEN(TRANSFORM(IIF(n2%1=0,n2+0.1,n2%1)))-2

19 楼

老兄:对不起!!!
实在太忙,今天才看见你的帖子,
谢谢你能记住我!!!

20 楼

[quote]老兄:对不起!!!
实在太忙,今天才看见你的帖子,
谢谢你能记住我!!![/quote]

CBL518大师忘了还得了,估计用不了多少天我就能转到你那里了,早点准备好酒呀。[em45]

我来回复

您尚未登录,请登录后再回复。点此登录或注册