注册 登录
编程论坛 VFP论坛

a表部分字段复制到b表

yd1954 发布于 2021-05-18 17:03, 2539 次点击
各位老师好!
我想将a表的部分字段复制到b表,2个表有相同的字段,也有不相同的字段。需要复制的是相同字段的一部分,不是全部相同的字段。不相同的字段不复制。
用了以下方法:
COPY TO 复制个数1 FIELDS LIKE qihao,h1,h2,h3,h1s1,h1s2,h1s3,h1s4,h1s5,h1s6,h1s7,h1s8......(共49个字段)结果是b表不相同的字段都没有了;


insert into 复制个数1(qihao,h1,h2,h3,;
                      h1s1,h1s2,h1s3,h1s4,h1s5,h1s6,h1s7,h1s8,h1s9,h1s10,h1s11,h1s12,h1s13,h1s14,h1s15,;
                      h2s1,h2s2,h2s3,h2s4,h2s5,h2s6,h2s7,h2s8,h2s9,h2s10,h2s11,h2s13,h2s13,h2s14,h2s15,;
                      h3s1,h3s2,h3s3,h3s4,h3s5,h3s6,h3s7,h3s8,h3s8,h3s10,h3s11,h3s12,h3s13,h3s14,h3s15,;
select qihao,h1,h2,h3,h1s1,h1s2,h1s3,h1s4,h1s5,h1s6,h1s7,h1s8,h1s9,h1s10,h1s11,h1s12,h1s13,h1s14,h1s15,;
                      h2s1,h2s2,h2s3,h2s4,h2s5,h2s6,h2s7,h2s8,h2s9,h2s10,h2s11,h2s12,h2s13,h2s14,h2s15,;
                      h3s1,h3s2,h3s3,h3s4,h3s5,h3s6,h3s7,h3s8,h3s9,h3s10,h3s11,h3s12,h3s13,h3s14,h3s15;
FROM 分列统计15期 CLEAR
结果是select后面的语句太长,VF死机。

COPY TO ARRAY sz1 FIELDS like qihao,h1,h2,h3,;
               h1s1,h1s2,h1s3,h1s4,h1s5,h1s6,h1s7,h1s8,h1s9,h1s10,h1s11,h1s12,h1s13,h1s14,h1s15,;
               h2s1,h2s2,h2s3,h2s4,h2s5,h2s6,h2s7,h2s8,h2s9,h2s10,h2s11,h2s12,h2s13,h2s14,h2s15,;               
               h3s1,h3s2,h3s3,h3s4,h3s5,h3s6,h3s7,h3s8,h3s8,h3s10,h3s11,h3s12,h3s13,h3s14,h3s15;
               all
运行没有问题,但不知道是否将49个字段的记录都复制到数组。
SELECT 复制个数1
append FROM ARRAY sz1 FIELDS qihao,h1,h2,h3,;     
                         h1s1,h1s2,h1s3,h1s4,h1s5,h1s6,h1s7,h1s8,h1s9,h1s10,h1s11,h1s12,h1s13,h1s14,h1s15,;
                         h2s1,h2s2,h2s3,h2s4,h2s5,h2s6,h2s7,h2s8,h2s9,h2s10,h2s11,h2s12,h2s13,h2s14,h2s15,;               
                         h3s1,h3s2,h3s3,h3s4,h3s5,h3s6,h3s7,h3s8,h3s8,h3s10,h3s11,h3s12,h3s13,h3s14,h3s15
运行结果是找不到sz1.

第四种方法:
scatter FIELDS qihao,h1,h2,h3,;
               h1s1,h1s2,h1s3,h1s4,h1s5,h1s6,h1s7,h1s8,h1s9,h1s10,h1s11,h1s12,h1s13,h1s14,h1s15,;
               h2s1,h2s2,h2s3,h2s4,h2s5,h2s6,h2s7,h2s8,h2s9,h2s10,h2s11,h2s12,h2s13,h2s14,h2s15,;               
               h3s1,h3s2,h3s3,h3s4,h3s5,h3s6,h3s7,h3s8,h3s8,h3s10,h3s11,h3s12,h3s13,h3s14,h3s15;
               to sz1
运行没有问题
gather from sz1 FIELDS qihao,h1,h2,h3,;     
                         h1s1,h1s2,h1s3,h1s4,h1s5,h1s6,h1s7,h1s8,h1s9,h1s10,h1s11,h1s12,h1s13,h1s14,h1s15,;
                         h2s1,h2s2,h2s3,h2s4,h2s5,h2s6,h2s7,h2s8,h2s9,h2s10,h2s11,h2s12,h2s13,h2s14,h2s15,;               
                         h3s1,h3s2,h3s3,h3s4,h3s5,h3s6,h3s7,h3s8,h3s8,h3s10,h3s11,h3s12,h3s13,h3s14,h3s15
运行后提示找不到sz1

请各位老师帮助指导。谢谢。

只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录

16 回复
#2
xuminxz2021-05-18 21:44
你说的是复制指定字段的数据吧。也就是将a中的部分字段的数据追加到b。我以以为用以下两种方法都可以。
1、建立一个中间空表temp,只包含需要从a中复制的字段。
sele temp
appe from a
sele b
appe from temp
2、建立一个视图 V_b
其中只选需要增加的字段,也可以全选,只更新需要的字段。
sele v_b
appe from a
#3
sdta2021-05-19 10:07
* 是不是这样的结果
CLOSE DATABASES ALL
USE 表b IN 0
ZAP
TEXT TO lcStr NOSHOW TEXTMERGE
qihao,h1,h2,h3,h1s1,h1s2,h1s3,h1s4,h1s5,h1s6,h1s7,h1s8,h1s9,h1s10,h1s11,h1s12,h1s13,h1s14,h1s15,h2s1,h2s2,h2s3,h2s4,h2s5,h2s6,h2s7,h2s8,h2s9,h2s10,h2s11,h2s12,h2s13,h2s14,h2s15,h3s1,h3s2,h3s3,h3s4,h3s5,h3s6,h3s7,h3s8,h3s9,h3s10,h3s11,h3s12,h3s13,h3s14,h3s15
ENDTEXT
SELECT 表b
APPEND FROM 表a FIELDS &lcStr
BROWSE


[此贴子已经被作者于2021-5-19 10:09编辑过]

#4
吹水佬2021-05-19 11:11
APPEND FROM ... 相同字段会自动对应的
这样看看
只有本站会员才能查看附件,请 登录

程序代码:
CREATE CURSOR t1 (f1 I,f2 I,f3 I,f4 I,f5 I,f6 I,f7 I)
FOR i=1 TO 10
    INSERT INTO t1 VALUES (i,2*i,3*i,4*i,5*i,6*i,7*i)
ENDFOR
CREATE CURSOR t2 (f1 I,f3 I,f5 I,f7 I)
APPEND FROM DBF("t1")
SELECT * FROM t2


所以,这样就可以:
USE 表b
ZAP
APPEND FROM 表a
SELECT * FROM 表b
#5
yd19542021-05-19 20:39
回复 3楼 sdta
sdta老师,你好!
你帮我写的程序,试运行,在后面第二行显示:语法错误。不知为什么?
#6
sdta2021-05-19 20:54
以下是引用yd1954在2021-5-19 20:39:47的发言:

sdta老师,你好!
你帮我写的程序,试运行,在后面第二行显示:语法错误。不知为什么?

楼上的代码是用VFP9写的
错误代码第几行?
#7
yd19542021-05-20 08:00
回复 6楼 sdta
sdta老师,你好!
错误:APPEND FROM 分列统计15期 FIELDS &lcStr  &&语法错误
#8
sdta2021-05-20 08:01
分列统计15期 这个表在你的附件中怎么没有看到
#9
yd19542021-05-20 08:05
回复 2楼 xuminxz
xuminxz老师,你好!
你的2个思路,非常好!
第一个思路,我试了,运行顺畅。第二个思路,视图要求在数据库环境下,我的表都是自由表,所以没试。但我想也会很好。
谢谢!
#10
yd19542021-05-20 08:06
回复 8楼 sdta
就是表a
#11
sdta2021-05-20 08:22
3楼的代码在VFP9中,用表a、表b运行正常

[此贴子已经被作者于2021-5-20 08:24编辑过]

#12
yd19542021-05-20 08:54
回复 4楼 吹水佬
吹水佬老师,你好!
你发来的的程序,我试了,运行顺畅。但复制到b表的字段是a表的全部字段。
我想是否在表a后面加字段名

USE 表b
ZAP
APPEND FROM 表a  &&加字段名
SELECT * FROM 表b
#13
yd19542021-05-20 09:03
回复 11楼 sdta
sdta老师,你好!
我也是在VFP9下运行。可能是我的操作不对。
非常感谢你的帮助。
#14
sdta2021-05-20 09:05
以下是引用yd1954在2021-5-20 09:03:54的发言:

sdta老师,你好!
我也是在VFP9下运行。可能是我的操作不对。
非常感谢你的帮助。

完整代码贴上来看看
#15
吹水佬2021-05-20 10:08
回复 12楼 yd1954
复制到b表的字段怎会是a表的全部字段?
a表有255个字段, b表才72个字段,复制到b表的字段只是a表的同名字段。
#16
sdta2021-05-20 10:11
以下是引用吹水佬在2021-5-20 10:08:21的发言:

复制到b表的字段怎会是a表的全部字段?
a表有255个字段, b表才72个字段,复制到b表的字段只是a表的同名字段。

实践证明,确实如楼主所说那样的
因此我的代码中加了FIELDS参数

[此贴子已经被作者于2021-5-20 10:12编辑过]

#17
吹水佬2021-05-20 11:48
所以,表结构设计得好会带来不少方便。
表不怕多,就怕表结构复杂。
1