2011-03-24 96 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