| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3386 人关注过本帖
标题:求大神支招!根据一个表的内容修改另一个表的字段名(列名),自己写了代码但 ...
只看楼主 加入收藏
thb1993419
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2019-6-4
结帖率:80%
收藏
已结贴  问题点数:20 回复次数:20 
求大神支招!根据一个表的内容修改另一个表的字段名(列名),自己写了代码但是无效,求指点!
表一(TD_CJXDM1.dbf):cjxdm       cjxmc
            Gk01        语文
            Gk02        数学     
            Gk03        英语        


表二(zcj_temp1.dbf):xh     Gk01    Gk02    Gk03   
           10011    85      90     77
           10058    99      70     73
           10069    55      43     88

想将表二改为如下:xh     语文    数学   英语   
         10011    85     90    77
         10058    99     70    73
         10069    55     43    88

上面的例子大致就是我想实现的功能,自己也写了代码,但是运行之后,表二字段名并没有改,不知道是为什么,有大神帮指导一下嘛?

附上自己的代码:
use zcj_temp1
select dist cjxdm,cjxmc from TD_CJXDM1 into cursor curTmp
scan
    cFieldName1 = allt(cjxdm)
    cFieldName2 = "_"+allt(cjxmc)  &&怕万一有数字开头的,所以统一都加了下划线
    select zcj_temp1
    for k=1 to fcount()
        myfield=fields(k)
        IF myfield=cFieldName1 then
            alter table zcj_temp1 rename column (cFieldName1) to (cFieldName2)
            exit
        ENDIF
     endfor
endscan


[此贴子已经被作者于2019-6-4 11:43编辑过]

搜索更多相关主题的帖子: 内容 字段 列名 代码 无效 
2019-06-04 08:54
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2197
专家分:3838
注 册:2007-4-27
收藏
得分:0 
以下是引用thb1993419在2019-6-4 08:54:26的发言:

表一(TD_CJXDM1.dbf):cjxdm       cjxmc
            g01        语文
            g02        数学     
            g03        英语        


表二(zcj_temp1.dbf):xh     g01    g02    g03   
           10011    85     90    77
           10058    99     70    73
           10069    55     43    88

想将表二改为如下:xh     语文    数学   英语   
         10011    85     90    77
         10058    99     70    73
         10069    55     43    88

上面的例子大致就是我想实现的功能,自己也写了代码,但是运行之后,表二字段名并没有改,不知道是为什么,有大神帮指导一下嘛?

附上自己的代码:
use zcj_temp1
select dist cjxdm,cjxmc from TD_CJXDM1 into cursor curTmp
scan
    cFieldName1 = allt(cjxdm)
    cFieldName2 = "_"+allt(cjxmc)  &&怕万一有数字开头的,所以统一都加了下划线
    select zcj_temp1
    for k=1 to fcount()
        myfield=fields(k)
? myfield    &&&& 加上这一句观察一下,再想对策
        IF myfield=cFieldName1 then
            alter table zcj_temp1 rename column (cFieldName1) to (cFieldName2)
            exit
        ENDIF
     endfor
endscan


只求每天有一丁点儿的进步就可以了
2019-06-04 09:55
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:987
专家分:4946
注 册:2013-2-16
收藏
得分:0 
对表 zcj_temp1进行一个 1 to Fcount()的遍历有点多余,可以只对TD_cjxdm1进行一次Scan就可以了。
程序代码:
LOCAL     cFieldName1 , cFieldName2  as String 
SELECT TD_CJXDM1
SCAN 
    cFieldName1 = UPPER(allt(cjxdm))
    * 万一有数字开头的,就加下划线
    cFieldName2 = IIF(ISDIGIT( LEFTC(cjxmc,1)) , "_"+allt(cjxmc) , allt(cjxmc))  
    IF FSIZE(cFieldName1,'zcj_temp1') > 0 THEN 
        alter table zcj_temp1 rename column (cFieldName1) to (cFieldName2)
    ENDIF 
ENDSCAN 
2019-06-04 10:00
wangzhiyi
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:366
专家分:684
注 册:2014-4-9
收藏
得分:0 
就没想明白,你为什么要用中文做字段名?
2019-06-04 10:04
thb1993419
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2019-6-4
收藏
得分:0 
回复 2楼 wengjl
试了下,发现输出的所有都是第一个字段的字段名,这是为什么呢?
2019-06-04 10:41
thb1993419
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2019-6-4
收藏
得分:0 
以下是引用厨师王德榜在2019-6-4 10:00:56的发言:

对表 zcj_temp1进行一个 1 to Fcount()的遍历有点多余,可以只对TD_cjxdm1进行一次Scan就可以了。
LOCAL     cFieldName1 , cFieldName2  as String
SELECT TD_CJXDM1
SCAN
    cFieldName1 = UPPER(allt(cjxdm))
    * 万一有数字开头的,就加下划线
    cFieldName2 = IIF(ISDIGIT( LEFTC(cjxmc,1)) , "_"+allt(cjxmc) , allt(cjxmc))  
    IF FSIZE(cFieldName1,'zcj_temp1') > 0 THEN
        alter table zcj_temp1 rename column (cFieldName1) to (cFieldName2)
    ENDIF
ENDSCAN





提示这句“IF FSIZE(cFieldName1,'zcj_temp1') > 0 THEN ” 文件不存在
2019-06-04 10:46
thb1993419
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2019-6-4
收藏
得分:0 
以下是引用wengjl在2019-6-4 09:55:53的发言:

刚才代码弄错了,我又试了下,“zcj_temp1”里所有字段都能正常输出显示到屏幕上,那是怎么回事呢,是不是alter table语句的问题?还是上面if判断条件的问题?
2019-06-04 11:32
gs2536785678
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:45
帖 子:601
专家分:1770
注 册:2017-7-16
收藏
得分:0 
回复 4楼 wangzhiyi
是啊,我的经验,VF表的字段尽量是英文的,题目中的学科完全可以用
XK01,XK02,.....
2019-06-04 12:29
thb1993419
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2019-6-4
收藏
得分:0 
以下是引用gs2536785678在2019-6-4 12:29:26的发言:

是啊,我的经验,VF表的字段尽量是英文的,题目中的学科完全可以用
XK01,XK02,.....


因为我后面想导成excel,一些固定的字段比如姓名什么的我可以通过select直接as为中文,但是这些科目的代码比较多,而且也不固定,所以想这样来搞
2019-06-04 12:37
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:41
帖 子:763
专家分:2503
注 册:2011-5-8
收藏
得分:0 
比较时将字母都转换为大写试试
IF upper(myfield)=upper(cFieldName1)

dBase有人接盘了。
2019-06-04 12:54
快速回复:求大神支招!根据一个表的内容修改另一个表的字段名(列名),自己写了代 ...
数据加载中...
 
   



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

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