| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2638 人关注过本帖
标题:求助。关于用 type()判断字段类型
只看楼主 加入收藏
lvyuanoffice
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-3-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
求助。关于用 type()判断字段类型
vfp荒废2、3年了。这基本的东西都搞不懂了,请教如下:
目的:由于字段较多,要求自动遍历表中每一字段类型

在一表单中加了combo列表框,数据源绑定一个表的结构
在interactivechange事件中加入如下代码
do case
case type(field(this.listindex,"表名"))="D"
    messagebox("日期")
case type(field(this.listindex,"表名"))="C"
    messageb("字符")
……
endcase

type()不会用了,怎么返回都是"U"类型的。
请高手指教。

[ 本帖最后由 lvyuanoffice 于 2014-4-18 12:03 编辑 ]
搜索更多相关主题的帖子: field 数据源 
2014-04-18 12:00
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:7 
看下帮助就知晓了
2014-04-18 12:20
lvyuanoffice
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-3-15
收藏
得分:0 
帮助没看清问题出在哪,刚才找到以前sdta的帖子。 在type()里要加表名,形如:type("表名."+field(this.listindex,"表名")),问题出在括号里没加表名,直接用字段名了。
谢谢
2014-04-18 13:07
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:7 
程序代码:
Clear 
Create Cursor T (A1 C(10),A2 N(2),A3 D,A4 I,A5 M,A6 L) && 整型数据显示数据类型为数值型
=Afields(ATYPE,'T')
For lnI=1 To Fcount('t')
    *方法一:
    ? Field(lnI,'t'),Type(Field(lnI,'t')),Vartype(Evaluate(Field(lnI,'t'))),Vartype(Field(lnI,'t'))
    *方法二:
    ? ATYPE(lnI,1),ATYPE(lnI,2)
Endfor 

注意观察结果

坚守VFP最后的阵地
2014-04-18 13:35
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
判断字段值的数据类型建议用方法二

坚守VFP最后的阵地
2014-04-18 13:46
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:658
专家分:2180
注 册:2014-2-7
收藏
得分:7 
就 Type()函数来说,要使用它判断当前工作区字段的数据类型,无需在字段前加表名。你的代码之所以出现问题,是因为当前工作区与 Field()函数所在的工作区不同所致。

使用 Type()函数来判断字段的数据类型有一定的局限性,比如:整数型(Integer)和数值型(Numric)都返回 N,与表结构中的数据类型不一致,所以使用 AField()函数来判断字段类型更好些。InterActiveChange 事件中的代码修正如下:
= AFIELD(aFld,"表名")
DO CASE
CASE aFld[this.listindex,2] = "D"
    MESSAGEBOX("日期")
CASE aFld[this.listindex,2] = "C"
    MESSAGEBOX("字符")
CASE aFld[this.listindex,2] = "I"
    MESSAGEBOX("整数")
CASE aFld[this.listindex,2] = "N"
    MESSAGEBOX("数值")
……
ENDCASE

泉城飞狐
2014-04-18 13:57
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用lvyuanoffice在2014-4-18 12:00:29的发言:

vfp荒废2、3年了。这基本的东西都搞不懂了,请教如下:
目的:由于字段较多,要求自动遍历表中每一字段类型

在一表单中加了combo列表框,数据源绑定一个表的结构
在interactivechange事件中加入如下代码
do case
case type(field(this.listindex,"表名"))="D"
    messagebox("日期")
case type(field(this.listindex,"表名"))="C"
    messageb("字符")
……
endcase

type()不会用了,怎么返回都是"U"类型的。
请高手指教。

建议使用 Field(This.ListItemId,'表名') 试试

坚守VFP最后的阵地
2014-04-18 14:01
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用lvyuanoffice在2014-4-18 13:07:56的发言:

帮助没看清问题出在哪,刚才找到以前sdta的帖子。 在type()里要加表名,形如:type("表名."+field(this.listindex,"表名")),问题出在括号里没加表名,直接用字段名了。
谢谢

直接判断某个字段名是否存在,前面要加表名
?Type('a.aa')
如果用Field()前面不需要加表名,也不需要加引号

坚守VFP最后的阵地
2014-04-18 14:05
lvyuanoffice
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-3-15
收藏
得分:0 
受益了。谢谢,热心人很多呀。自己没事又想练练VFP编程了,编一个人力资源管理系统。练练手,很久很久没用VFP了。
2014-04-18 14:14
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
建议楼主用VARTYPE()函数代替TYPE()函数,前者无需把变量名括在引号里,使用比较方便。
2014-04-18 16:29
快速回复:求助。关于用 type()判断字段类型
数据加载中...
 
   



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

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