Petrakoff Sergey писал(а): Но остаются непонятки. В частности, я впервые вижу вызов функции таким образом. Более "привычно" выглядит вызов таким образом
Dbf2.AddIndex('IND_DATPRIH', DTOS('DATPRIH'), []);
На что Lazarus вежливо сообщает, что не знает такой функции
Lazarus Вас упрекает совершенно справедливо.

Потому, что название этой функции обрабатывает парсер компонента TDbf и потом уже преобразовывает в стандартную FreePascal'евскую функцию преобразования даты в строку. Это сделано для обратной совместимости со старыми базами, т.к. индексное выражение хранится прямо в файле индекса самым обычным текстом. Можете посмотреть, если хотите, открыв файл индекса в каком-нибудь текстовом редакторе.
Petrakoff Sergey писал(а):Во-вторых, почему не прокатывает способ, которым я пытался делать вначале, т.е.
Код: Выделить всё
date_string:= DateToStr(Dbf2.FieldByName('DATPRIH').AsDateTime);
Dbf2.AddIndex('IND_DATPRIH', date_string, []);
Именно по причине, которую я описал выше.

Petrakoff Sergey писал(а):Где-то на этом форуме видел, что мол не стоит использовать функцию DTOS(), она вроде устарела.
Если Вы категорически настаиваете на использовании DBF, то иной альтернативы построить индекс, не по числовому или строковому полю, у Вас нет.
Petrakoff Sergey писал(а):От обилия кавычек, двойных и одинарных, зарябило в глазах.
Ничего не поделаешь. Фильтр в TDbf - это строка. Строка в Паскале всегда пишется в одинарных кавычках. Значения в фильтре - это ещё одна строка и их тоже надо брать в кавычки. Как раз в данном случае выражение более понятно, т.к. мы ясно видим, где строка паскалевская, а где та, которая уже относится к DBF-файлу.
Petrakoff Sergey писал(а):Где можно почитать про то, как надо правильно расставлять эти кавычки?
Вы опоздали на добрых 20 лет.

Если коротко, то где какие ставить кавычки я Вам объяснил выше:
1) Всё фильтрующее выражение - это строка Паскаля. Эта строка должна быть в одинарных кавычках.
2) Те строковые значения полей, которые находятся внутри строки фильтра, должны быть в двойных кавычках.
Соответственно, если Вы получаете значения поля для фильтра с помощью какой либо
стандартной функции FreePascal, то должны это значение обрамить двойными кавычками. А раз двойные кавычки - это строка Паскаль, то они должны быть обрамлены ещё и одинарными кавычками.
Это самое простое "почитать".
