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

比较时将字母都转换为大写试试
IF upper(myfield)=upper(cFieldName1)

 改完之后,提示这句“alter table zcj_temp1 rename column (cFieldName1) to (cFieldName2)”语法错误,是怎么回事?
2019-06-04 14:58
thb1993419
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2019-6-4
收藏
得分:0 
以下是引用sdta在2019-6-4 12:59:03的发言:

1 DBF表中的字段名不可能以数字开头
2 表2中的字段名没有修改的必要
3 在需要的时候再修改字段名的显示
CREATE CURSOR T1 (cjxdm c(10), cjxmc c(10))
INSERT INTO T1 VALUES ("Gk01","语文")
INSERT INTO T1 VALUES ("Gk02","数学")
INSERT INTO T1 VALUES ("Gk03","英语")
CREATE CURSOR T2 (xh c(10), Gk01 n(3), Gk02 n(3), Gk03 n(3))
INSERT INTO T2 VALUES ("10011",85 , 90, 77)
INSERT INTO T2 VALUES ("10058",99 , 70, 73)
INSERT INTO T2 VALUES ("10069",55 , 43, 88)
SELECT T1
cStr = "xh"
SCAN
    cStr = cStr +  "," + cjxdm + " AS " + cjxmc
ENDSCAN  
SELECT &cStr FROM T2


谢谢您给的建议,我觉得这样的思路非常好,但是有一点不太明白:
表一和表二其实并不固定,表一里面有40多个cjxdm和cjxmc的,同理表二的字段名也有很多将近40多个,这种情况怎么弄?有没有办法只对两个表进行操作,具体怎么写呢?
非常感谢您的指导!
2019-06-04 15:01
thb1993419
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2019-6-4
收藏
得分:0 
以下是引用sdta在2019-6-4 18:13:20的发言:

表一有几条记录不是重要的,重要的是你要弄清楚代码的思路及最后的运行结果

思路我很清楚啊,表一里面就是纯代码表,没有重复的,但是成绩项有很多很多个
我的目的也很明确,就是为了按照表一的代码,来生成表二的一个excel,其中这些字段名都用中文来表示
2019-06-04 18:48
thb1993419
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2019-6-4
收藏
得分:0 
以下是引用sdta在2019-6-4 20:10:29的发言:


上面的代码绝对能满足你的要求


非常感谢,用你的方法成功了!感谢耐心指导啊!
2019-06-05 09:00
快速回复:求大神支招!根据一个表的内容修改另一个表的字段名(列名),自己写了代 ...
数据加载中...
 
   



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

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