2011-03-24 60 views
1

我在FoxPro中的dbf文件中有60,000条记录。我想将它分成每个20,000条记录(20000 * 3 = 60,000)。如何拆分FoxPro记录?

我该如何做到这一点?

我是FoxPro新手。我正在使用Visual FoxPro 5.0。

在此先感谢。

回答

3

您必须使用COPY命令时,确保你已经开始对下一个记录发出SKIP命令。

USE MyTable 
GO TOP 
COPY NEXT 20000 TO NewTable1 
SKIP 1 
COPY NEXT 20000 TO NewTable2 
SKIP 1 
COPY NEXT 20000 TO NewTable3 
0

您可以直接从第一表中选择:

SELECT * from MyBigTable INTO TABLE SmallTable1 WHERE ID < 20000 
SELECT * from MyBigTable INTO TABLE SmallTable2 WHERE ID BETWEEN (20000, 39999) 
SELECT * from MyBigTable INTO TABLE SmallTable3 WHERE ID > 39999 

,如果你想要更多的控制,但是,或者你需要处理数据,您可以使用XBASE代码,像这样:

SELECT MyBigTable 

scan 
    scatter name oRecord memo 

    if oRecord.Id < 20000 
     select SmallTable1 
     append blank 
     gather name oRecord memo 
    else if oRecord.Id < 40000 
     select SmallTable2 
     append blank 
     gather name oRecord memo 
    else 
     select SmallTable3 
     append blank 
     gather name oRecord memo 
endscan 

自从我使用VFP以来,我已经有一段时间了,并且我没有它,所以对于任何语法错误都表示歉意。

0
use in 0 YourTable 
select YourTable 
go top 
copy to NewTable1 next 20000 
copy to NewTable2 next 20000 
copy to NewTable3 next 20000 
+0

您需要的COPY之间发出SKIP 1命令,命令将记录指针前进1分的纪录。用你的答案,NewTable1的最后一条记录与NewTable2的第一条记录相同。 – DaveB 2011-03-25 17:12:03

1

托德的建议将工作,如果你不在乎记录如何拆分。如果你想根据他们的内容划分它们,你会想要做一些类似斯图尔特的第一个建议,尽管他的确切答案只有在记录的ID从1到60,000的顺序才有效。

这里的最终目标是什么?为什么把桌子分开?

添马舰

0

如果你想基于创纪录的数字分裂,试试这个:

SELECT * FROM table INTO TABLE tbl1 WHERE RECNO() <= 20000 
SELECT * FROM table INTO TABLE tbl2 WHERE BETWEEN(RECNO(), 20001, 40000) 
SELECT * FROM table INTO TABLE tbl3 WHERE RECNO() > 40000