Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Foxpro/Clipper/Dbase > BDE+DBF(FoxPro)


Автор: LAW 1.7.2006, 19:06
Здравствуйте!
Проблема при поиске по нескольким полям...
Есть DBF с полями Field1(String(1)),Field2(int),Field3(String(250))
Создаю составной индекс по полям Field1+Field2+Field3
Индекс нормально создаётся.

(Locate() прекрасно работает, но очень медленно. Если делаю GotoKey() по одному, любому полю, всё летает как надо...)

Далее делаю
SetKey();
потом 
FieldByName('Field1') = String1;
FieldByName('Field2') = Int1;
FieldByName('Field3') = String2;
потом
GotoKey();

Результат следующий:
Если значение Field1 не равно String1 -  то false (не нашли). 
Если значение Field1 равно String1,а значение Field2 не равно String2 - то true (нашли).
Из за этого теряет смысл весь GotoKey()  smile
Может чего подскажите? 

Автор: Сергей 1.7.2006, 20:40
Может тебя натолкнет, на что - следующая инфа:

В Foxe - есть ограничения на длину поля, которое принимает участие в создании индекса.

Из Help для VFP9:
Цитата

For a standalone index (.idx) file, the length of an index key must be between 1 and 100 characters. For a compound index (.cdx) file, the length of an index key must be between 1 and 240 characters. 


Так вот, Field3(String(250)) – уже не подходит под это ограничение, это первое.
Второе, попробуй создать индексы для каждого поля отдельно, если это допустимо по логике работы с программой
 

Автор: Сергей 1.7.2006, 21:05
Вот еще инфа для размышлений:
Методом GoToKey курсор курсор переводится на запись, в которой значение указанного поля равно ключу. Если таких записей несколько, то курсор переводится на первую из них. Если соответствующая запись не находится, то метод GoToKey возвращает false. Для полей типа строк, можно использовать не метод GoToKey, а метод GoToNearest. Этот метод перемещает курсор на запись, максимально близкую к ключу. Т.е. он срабатывает и тогда, когда совпадение не полное.
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)