Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.14;
Скачать: CL | DM;

Вниз

Как осуществить поиск в индексе, построенном по двум полям в 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
1-45883
AL2002
2002-11-05 17:43
2002.11.14
Как узнать количество поторяющихся строк в ListBox?


1-45906
fellis
2002-11-03 09:56
2002.11.14
Есть ли процедура добавления файла на рабочий стол?


1-45827
Azazello
2002-11-05 11:41
2002.11.14
Сохранение в один файл


14-46092
copyr25
2002-10-25 21:09
2002.11.14
---|Ветка была без названия|---


1-45976
Dennis S
2002-11-04 14:38
2002.11.14
работа с диалогом Find