Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.029 c
3-45788
новичок
2002-10-25 14:54
2002.11.14
Как в таблице очистить все поля? Пробовал


4-46187
knyaz17
2002-10-04 10:39
2002.11.14
Ошибка утилиты CACLS!!!!


3-45764
Старый НавичЁк
2002-10-25 13:06
2002.11.14
Обновление данных... как мне сказать об ентом клаенту?


1-45804
Cobalt
2002-11-04 22:40
2002.11.14
Размеры ListBox


3-45757
Andy Eremin
2002-10-25 07:39
2002.11.14
Свойство Expression компонента QRExpr





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский