Индексирование и сохранение VFP с включенным INDEX, пока существует CDX

Работая с VFP 9, я проиндексировал файл DBF по group (столбец в DBF), используя

 INDEX ON group TO group1

и записи в правильном порядке. Но тогда, каждый раз, когда я закрываю и снова открываю DBF, индексация теряется (без порядка group). Я нашел файл .CDX в той же папке, что и мой group.idx и dbf, и похоже, что он дает структуру DBF, но я не знаю, как его изменить или увидеть.

Чтобы решить эту проблему, я стер файл CDX (конечно, всплывающее окно с ошибкой, потому что он не мог найти .cdx) и использовал функцию COPY TO, чтобы сохранить проиндексированный DBF, но это не реальное решение проблемы (что является решение, упомянутое на форуме, но мне это не кажется лучшим подходом). Я также пытался использовать функцию PACK в конце, непосредственно перед закрытием базы данных, но не смог сохранить индексацию набора данных.

Помимо упомянутого выше, я не смог найти ответа на эту конкретную проблему в Интернете, поэтому я очень ценю любые комментарии, которые помогут мне понять это и разрешить индексацию во время кодирования, и, конечно же, убедитесь, что индекс и изменения останется на месте при закрытии базы данных. Спасибо заранее!

Дополнительный вопрос: обычно, когда я индексирую, я даю имя созданному файлу IDX, но при работе с похожими DBF я повторяю кодирование и индексирую разные таблицы с тем же именем idx (поэтому я перезаписываю файл . idx каждый раз, думая, что это уже бесполезно), но я действительно не знаю, может ли это вызвать у меня проблемы в будущем.

Обновление: Хотя мне не удалось решить проблему непосредственно для конкретного DBF с помощью команд индексации и порядка, я использовал команду COPY TO, а затем вручную заменил новый DBF на Старый.

Это может быть интересно новичкам вроде меня: http://www2.hkedcity.net/sch_files/a/tps/tps-comp/visitor_cabinet/123570/db-ch05.pdf


person AR_Domingo    schedule 11.09.2018    source источник


Ответы (2)


IDX обычно не рекомендуется. Чтобы получить CDX (составной индекс), используйте немного другой синтаксис («TAG» вместо «TO»):

INDEX ON group TAG group1

Я бы также рекомендовал не использовать «группу» в качестве имени поля/столбца, поскольку это зарезервированное слово в VFP.

person Steve    schedule 11.09.2018
comment
Такое простое решение! Большое спасибо, Стив! Я только что попробовал, все идет гладко. Кстати, порядок остается в силе, если я удалю CDX после запуска программы на DBF?? - person AR_Domingo; 18.09.2018
comment
Ваше здоровье. Также см. дополнение Херба Вулфа ниже. - person Steve; 18.09.2018

В дополнение к использованию команды INDEX ON group TAG group1, когда вы (повторно) открываете файл, вам нужно выбрать индекс. Это можно сделать одним из двух способов.

Либо

USE filename
SET ORDER TO group1

or

USE filename ORDER TAG group1
person Herb    schedule 12.09.2018
comment
Спасибо Херб! Есть ли способ открыть DBF уже с установленным порядком? потому что я хочу, чтобы он сохранял тот же порядок, что и с момента последней программы, запущенной на dbf. @Стив - person AR_Domingo; 18.09.2018
comment
Неа. Никакой метод не помог для этого dbf (он помог для других), я попробовал оба метода, которые вы предлагаете, используя TAG и TO (конечно, не одновременно), но dbf продолжает сбрасывать себя. Я не знаю, почему заказ не сохраняется после того, как я его закрою. есть ли шанс, что в этом dbf есть панель структуры или редактируемый параметр, который кто-то мог изменить? - person AR_Domingo; 18.09.2018
comment
Как и раньше, я решил проблему, открыв dbf, установив порядок, а затем используя COPY TO, чтобы сохранить dbf с похожим именем и, таким образом, перезаписать dbf вручную... Из-за этого я разместил этот вопрос в начале, но это всего лишь некоторые DBF. , не все, и конечно я проверял миллион раз. - person AR_Domingo; 18.09.2018