Форум: "Базы";
Текущий архив: 2002.11.14;
Скачать: [xml.tar.bz2];
ВнизКак осуществить поиск в индексе, построенном по двум полям в DBF Найти похожие ветки
← →
Duke2 (2002-10-23 20:45) [0]Уважаемые Мастера !
Как осуществить поиск в индексе, построенном по двум полям в таблицах DBF ?
Известный парадоксовский метод FindKey([поле1, поле2]) в таблицах BDF ругается примерно такими словами (перевод): "Нельзя применить массив полей поиска ", что совершенно логично, так как индекс был построен по выражению: IndexDefs.Add("поле1+поле2"), так как построить для DBF индекс типа IndexDefs.Add("поле1;поле2") - невозможно (почему -то)
Во времена ДОС (clipper) я спокойно мог построить индекс по выражению:
"поле1+IntToStr(поле2)" - и точно по такому же выражению искать. То есть в индексное выражение включались функции преобразования строк, чисел, дополнения строк пробелами и.т.д. В этом случае индексный поиск по двум полям проходит идеально. Но такой прием недопустим в Delphi.
Пробовал применить другой метод:
Table1.EditKey;
Table1.FieldByName(Поле1"").asString=значение1;
Table1.FieldByName("Поле2").asInteger:=значение2;
Table1.GotoKey;
Этот метод ищет только по первому полю, возвращает true и ставит курсор на первую попавшуюся запись, совпадающую только по параметру Поле1, а по двум сразу- не ищет.
Причем одинаково успешно НЕ ИЩЕТ независимо от типа полей- одинаковые String, одинаковые поле1 и поле2 Integer, разные по типам..
Пробовал искать по выражению, однако он ставит курсор на первую попавшуюся запись поле1+поле2, например, я хочу найти запись, где поле1=16 и поле2=3, находит первое попавшееся по сумме поле1 + поле2 запиь: поле1=15 и поле2=4.
Вы можете мне возразить, что можно воспользоваться Парадоксом а не bdf, однако индексы у DBF я хоть могу починить в случае их разрушения (в отличии от Парадокса), к тому же, если внимательно почитать эту конференцию - очень много ругательств на Парадокс за его непонятные разрушения и все советуют использовать dbf.
ВОПРОС: Неужели нельзя искать в индексах DBF сразу по двум полям, неужели придется искать простым и медленным перебором (типа Locate) ?
← →
Anatoly Podgoretsky (2002-10-23 21:05) [1]Что то у тебя не то, приведенный метод работает, приведи точное значение индекса
← →
Duke2 (2002-10-23 21:13) [2]Значение индекса:
Table1.IndexDefs.Add("cod_p+cod_pos");
← →
Duke2 (2002-10-23 21:15) [3]Table1.IndexDefs.Add("cod_p+cod_pos");
← →
Anatoly Podgoretsky (2002-10-23 21:22) [4]Я просил привести точно
Что такое cod_p и cod_pos
← →
Jeer (2002-10-23 21:23) [5]dBASE multi-field indexes cannot be created using a list of fields separated by semi-colons in the Fields parameter. To create these indexes, use an expression with dBASE data manipulation (DML) functions and operators to concatenate the multiple fields into a single expression.
← →
Duke2 (2002-10-24 06:43) [6]cod_p и cod_pos - это коды потребителя и поставщика, я их пробывал в разных комбинациях: строковые, числовые, смешанные -строкиа и число -НЕ ПОМОГАЕТ
А что касается индекса DBASE по выражению - тоже пробовал, но там нельзя использовать функции приведения индексных полей к одному типу и длинне (для строк)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.11.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c