| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 673 人关注过本帖, 1 人收藏
标题:如何实现数据库的结构转换?
只看楼主 加入收藏
smart921
Rank: 1
等 级:新手上路
帖 子:107
专家分:9
注 册:2010-8-8
结帖率:86.96%
收藏(1)
已结贴  问题点数:10 回复次数:11 
如何实现数据库的结构转换?
比如:有这个表
bz     rs      ycbt
f50    10     633600
f55    5      244800
m60    35    1209600
转换为
bz       f50         f55         m60
rs       10          5           35
ycbt    633600      244800      1209600
请问如何实现?
搜索更多相关主题的帖子: 数据库 
2011-04-02 16:38
xmlz
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:294
专家分:1392
注 册:2010-8-29
收藏
得分:0 
execel中复制——选择性粘贴:转置 ok了
写代码的话先建好新表
scan循环扫描数据填充新纪录
2011-04-02 16:51
smart921
Rank: 1
等 级:新手上路
帖 子:107
专家分:9
注 册:2010-8-8
收藏
得分:0 
回复 2楼 xmlz
能否具体一点。谢谢!
2011-04-02 17:23
xmlz
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:294
专家分:1392
注 册:2010-8-29
收藏
得分:0 
CREATE CURSOR tb1 (bz c(8),rs c(8),ycbt c(8))
INSERT INTO tb1 VALUES ("f50","10","633600")
INSERT INTO tb1 VALUES ("f55","5","1244800")
INSERT INTO tb1 VALUES ("m60","35","11209600")

***程序没有对字段宽度和字段类型作任何判断,假定为全部为字符型,宽度不超20字符可以容纳,
***且tb1第一列全部数据可以直接作字段名,并且没有重复
AFIELDS(arr1,"tb1")
tbstru="create cursor tb2 (&arr1(1,1). c(20)"    &&字段宽度没有作严格的判断,可以自己完善
SCAN
    tbstru=tbstru+","+ALLTRIM(&arr1(1,1).)+" c(20)"
ENDSCAN
?tbstru+")"
EXECSCRIPT(tbstru+")")

AFIELDS(arr2,"tb2")
FOR i=2 TO ALEN(arr1,1)
    INSERT INTO tb2 (&arr1(1,1).) VALUES (arr1(i,1))
ENDFOR

CLEAR
FOR j=2 TO ALEN(arr1,1)
        SELECT tb1
        SCAN
            mval="tb1."+arr1(j,1)
            EXECSCRIPT("update tb2 set "+arr2(RECNO("tb1")+1,1)+"=["+&mval.+"] where "+arr2(1,1)+"=["+arr1(j,1)+"]")
        ENDSCAN
ENDFOR
SELECT tb2
BROWSE
2011-04-03 21:26
smart921
Rank: 1
等 级:新手上路
帖 子:107
专家分:9
注 册:2010-8-8
收藏
得分:0 
回复 4楼 xmlz
非常感谢!不过EXECSCRI(tbstru+")")是不是写错了。运行后提示EXECSCRI.prg不存在。
2011-04-04 08:48
xmlz
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:294
专家分:1392
注 册:2010-8-29
收藏
得分:10 
EXECSCRIPT()
2011-04-04 10:36
xmlz
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:294
专家分:1392
注 册:2010-8-29
收藏
得分:0 
上面的代码运行通过。
execscript()及时省略后面两个字母,VFP也应该是可以识别的,因为不存在产生二义的另外的函数
2011-04-04 10:42
smart921
Rank: 1
等 级:新手上路
帖 子:107
专家分:9
注 册:2010-8-8
收藏
得分:0 
回复 7楼 xmlz
Doc1.zip (61.19 KB)
2011-04-04 17:38
xmlz
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:294
专家分:1392
注 册:2010-8-29
收藏
得分:0 
运行环境,vfp9.0,如果低版本没有这个函数,改成宏替换吧
CREATE CURSOR tb1 (bz c(8),rs c(8),ycbt c(8))
INSERT INTO tb1 VALUES ("f50","10","633600")
INSERT INTO tb1 VALUES ("f55","5","1244800")
INSERT INTO tb1 VALUES ("m60","35","11209600")

***程序没有对字段宽度和字段类型作任何判断,假定为全部为字符型,宽度不超20字符可以容纳,
***且tb1第一列全部数据可以直接作字段名,并且没有重复
AFIELDS(arr1,"tb1")
tbstru="create cursor tb2 (&arr1(1,1). c(20)"    &&字段宽度没有作严格的判断,可以自己完善
SCAN
    tbstru=tbstru+","+ALLTRIM(&arr1(1,1).)+" c(20)"
ENDSCAN
tbstru=tbstru+")"
&tbstru.

AFIELDS(arr2,"tb2")
FOR i=2 TO ALEN(arr1,1)
    INSERT INTO tb2 (&arr1(1,1).) VALUES (arr1(i,1))
ENDFOR

CLEAR
FOR j=2 TO ALEN(arr1,1)
        SELECT tb1
        SCAN
            mval="tb1."+arr1(j,1)
            upstr="update tb2 set "+arr2(RECNO("tb1")+1,1)+"=["+&mval.+"] where "+arr2(1,1)+"=["+arr1(j,1)+"]"
            &upstr.
        ENDSCAN
ENDFOR
SELECT tb2
BROWSE
2011-04-05 21:29
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9842
专家分:27213
注 册:2012-2-5
收藏
得分:0 
程序代码:
CREATE CURSOR tb1 (bz c(8),rs c(8),ycbt c(8))
INSERT INTO tb1 VALUES ("f50","10","633600")
INSERT INTO tb1 VALUES ("f55","5","1244800")
INSERT INTO tb1 VALUES ("m60","35","11209600")
AFIELDS(cc)
COPY TO ARRAY aa fields rs, ycbt
LOCAL bb[ALEN(aa, 2), ALEN(aa, 1)]
FOR lnj = 1 TO ALEN(aa)
    la1 = asubscript(aa, lnj, 1)
    la2 = asubscript(aa, lnj, 2)
    bb[la2, la1] = aa[lnj]
ENDFOR
lcStr = "bz c(10)"
lcZdm = ""
SCAN 
    lcStr = lcStr + ", " + ALLTRIM(bz) + " c(10)"
    lcZdm = lcZdm + IIF(EMPTY(lcZdm), "", ",") + ALLTRIM(bz)
ENDSCAN 

CREATE CURSOR tt (&lcStr)
FOR lnj = 2 TO ALEN(cc, 1)
    INSERT INTO tt (bz) VALUES (cc[lnj, 1])
ENDFOR
REPLACE FROM ARRAY bb FIELDS &lcZdm ALL 
BROWSE 

坚守VFP最后的阵地
2021-03-07 11:27
快速回复:如何实现数据库的结构转换?
数据加载中...
 
   



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

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