Как разделить записи FoxPro? - PullRequest
1 голос
/ 24 марта 2011

У меня есть 60 000 записей в файле dbf в FoxPro.Я хочу разбить его на каждые 20 000 записей (20000 * 3 = 60 000).

Как мне этого добиться?

Я новичок в FoxPro.Я использую Visual FoxPro 5.0.

Заранее спасибо.

Ответы [ 5 ]

3 голосов
/ 25 марта 2011

Вы должны выполнить команду SKIP при использовании команды COPY, чтобы убедиться, что вы запускаете следующую запись.

USE MyTable
GO TOP
COPY NEXT 20000 TO NewTable1
SKIP 1
COPY NEXT 20000 TO NewTable2
SKIP 1
COPY NEXT 20000 TO NewTable3
1 голос
/ 24 марта 2011

Предложение Тодда сработает, если вам все равно, как делятся записи. Если вы хотите разделить их на основе их содержания, вам нужно сделать что-то вроде первого предложения Стюарта, хотя его точный ответ сработает только в том случае, если идентификаторы для записей имеют порядок от 1 до 60000.

Какова конечная цель здесь? Зачем делить таблицу?

Тамар

0 голосов
/ 05 августа 2012

Если вы хотите разделить на основе номеров записей, попробуйте это:

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
0 голосов
/ 24 марта 2011
use in 0 YourTable
select YourTable
go top
copy to NewTable1 next 20000
copy to NewTable2 next 20000
copy to NewTable3 next 20000
0 голосов
/ 24 марта 2011

Вы можете напрямую выбрать из первой таблицы:

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, и у меня его нет, поэтому извиняюсь за любые синтаксические ошибки.

...