У меня есть 60 000 записей в файле dbf в FoxPro. Я хочу разбить его на каждые 20 000 записей (20 000 * 3 = 60 000).
Как я могу этого добиться?
Я новичок в FoxPro. Я использую Visual FoxPro 5.0.
Заранее спасибо.
У меня есть 60 000 записей в файле dbf в FoxPro. Я хочу разбить его на каждые 20 000 записей (20 000 * 3 = 60 000).
Как я могу этого добиться?
Я новичок в FoxPro. Я использую Visual FoxPro 5.0.
Заранее спасибо.
Вы должны ввести команду 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 до 60 000 по порядку.
Какова конечная цель здесь? Зачем делить стол?
Тамар
Вы можете напрямую выбрать из первой таблицы:
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, и у меня его здесь нет, поэтому приносим извинения за любые синтаксические ошибки.
Если вы хотите разделить на основе номеров записей, попробуйте следующее:
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