| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1698 人关注过本帖
标题:求教:如何把下面三个表中记录按顺序插入一个表中
只看楼主 加入收藏
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
程序代码:
CREATE CURSOR abc (bh C(15), rec I, abc C(1))
CREATE CURSOR tmp (bh C(15), rec I, abc C(1))
SELECT tmp 
APPEND FROM a.dbf
REPLACE rec WITH RECNO(), abc WITH "a" ALL 
SELECT abc 
APPEND FROM DBF("tmp")
SELECT tmp 
ZAP
APPEND FROM b.dbf
REPLACE rec WITH RECNO(), abc WITH "b" ALL 
SELECT abc 
APPEND FROM DBF("tmp")
SELECT tmp 
ZAP
APPEND FROM c.dbf
REPLACE rec WITH RECNO(), abc WITH "c" ALL 
SELECT abc 
APPEND FROM DBF("tmp")
CALCULATE MAX(rec) TO MaxRec
MaxRec = LEN(TRANSFORM(MaxRec))
INDEX ON PADL(rec, MaxRec, "0") + abc TAG Recabc
BROWSE
2015-07-15 15:52
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2214
专家分:3882
注 册:2007-4-27
收藏
得分:0 
以下是引用sdta在2015-7-15 15:46:36的发言:

SELECT bh,SPACE(5) as xh from a where .t. into table hzb
FOR i=1 to 3300
    APPEND FROM a for RECNO()=i
    APPEND FROM b for RECNO()=i
    APPEND FROM c for RECNO()=i
ENDFOR
BROWSE

高,这代码简洁,我怎么想不到。得继续学习哎……

只求每天有一丁点儿的进步就可以了
2015-07-15 16:15
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
代码简练,效率是否高,没验证。

坚守VFP最后的阵地
2015-07-15 17:21
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用wengjl在2015-7-15 16:15:17的发言:


高,这代码简洁,我怎么想不到。得继续学习哎……

数据量小问题不大,数据量大时效率会受到影响,就算 APPEND FROM 命令有多高效,每次调用都要读取整个文件内容。
如本例要对3个文件各读取整个文件3千多次了,如果数据再大点,效率就可想而知。
2015-07-16 08:15
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
select bh,"a"+padl(recno(),4,"0") xh from a union all select bh,"b"+padl(recno(),4,"0") from b union all select bh,"c"+padl(recno(),4,"0") from c into cursor abc
index on right(xh,4) tag aa
copy to aa fields bh
use aa
browse
也是很慢,
分成三句生成三个文件然后追加一个文件再索引,虽然打命令多一一点,速度会快点的。
select bh,"a"+padl(recno(),4,"0") xh from a  into table ls1
select bh,"b"+padl(recno(),4,"0") xh from b  into table ls2
select bh,"c"+padl(recno(),4,"0") xh from c  into table ls3
select ls1
appe from ls2
appe from ls3
inde on righ(xh,4) to ls0
brow


[ 本帖最后由 sylknb 于 2015-7-16 10:41 编辑 ]
2015-07-16 10:37
沙枣
Rank: 4
来 自:宁夏银川
等 级:业余侠客
威 望:5
帖 子:103
专家分:221
注 册:2015-5-31
收藏
得分:3 
回复 楼主 smithw
针对所给样本数据,对每个库的所有记录顺序编号,依次加载到目标库,再重新进行排序,可靠而高效,不会破坏原库的数据和结构,而能得到所要的结果,主要代码如下:

private all
set safety off
use a
copy to ls.dbf
use ls
alter table ls add column ls_xh N(10)
replace all ls_xh with recno()
copy structure to hzk
use hzk
append from ls
use b
copy to ls.dbf
use ls
alter table ls add column ls_xh N(10)
replace all ls_xh with recno()
use hzk
append from ls
use c
copy to ls.dbf
use ls
alter table ls add column ls_xh N(10)
replace all ls_xh with recno()
use hzk
append from ls
sort to hzk1 on ls_xh
use hzk1
brow
erase ls.dbf
erase ls.fpt
erase hzk.dbf
erase hzk.fpt
return


[ 本帖最后由 沙枣 于 2015-7-16 11:23 编辑 ]
2015-07-16 11:21
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
以下是引用sdta在2015-7-15 15:46:36的发言:

SELECT bh,SPACE(5) as xh from a where .F. into table hzb
FOR i=1 to 3300
    APPEND FROM a for RECNO()=i
    APPEND FROM b for RECNO()=i
    APPEND FROM c for RECNO()=i
ENDFOR
BROWSE
此句中:SELECT bh,SPACE(5) as xh from a where .F. into table hzb 的where .F.为什么.f.?用.T.可否?
2015-07-16 13:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
这种需求,第一本来就不需要合併到一张表中,第二就算合併也只是两次append from的代价。

授人以渔,不授人以鱼。
2015-07-16 15:04
星光悠蓝
Rank: 9Rank: 9Rank: 9
来 自:山水甲天下
等 级:贵宾
威 望:52
帖 子:525
专家分:1278
注 册:2010-1-11
收藏
得分:3 
全部合并后排序就OK!
2015-07-16 16:32
smithw
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2005-8-19
收藏
得分:0 
感谢论坛高人无私的帮助,
原本的需求是这样的,看我能不能表述的清楚。
2015.rar (27.7 KB)

先看一下2015excel表,里面有三列数据,3080行数据,第二列最后一个和第三列第一个数据号码是连续的。
现在第一个问题是数据的行数需要能被300整除,所以要变成3300行数据,顺号连续。
第二个问题是要3300/3=1100为间隔分成三个数据段降序,三列数据都是这样,而且要保证三列数据的每行数据
一一对应。最终能做成如图式样的txt数据文件。
图片附件: 游客没有浏览图片的权限,请 登录注册
excel表只是个形式为了说明问题,号段的生成排序应该可以在程序一并完成吧。数据也不局限在3300行
         也可能是9000行,不定。 各位有闲暇帮看一下。
      
2015-07-16 17:32
快速回复:求教:如何把下面三个表中记录按顺序插入一个表中
数据加载中...
 
   



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

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