Как сделать запрос непосредственно к DBF

Новая тема
Есть DBF с ежедневным добавлением записей. Соответственно кол-во строк может быть большое. Есть колонка Дата. Как делать запрос непосредственно к дбф, не перебирая все строки (XBase) а сразу с отбором?
Если у тебя свой файл DBF (не связанный с конфигурацией 7.7), то к нему можно сделать индексный файл и использовать методы поиска.
"Запрос непосредственно к dbf:

СтрокаПодключения="DSN=dBASE Files;DBQ=C:\test"; //"dBASE Files" - идентификатор источника данных ODBC
//из пользовательского DSN. C:\test - путь к каталогу где лежит dbf
Соединение = Новый COMОбъект("ADODB.Connection");Соединение.ConnectionTimeOut =600;Соединение.CursorLocation = 3;Попытка     Соединение.Open(СтрокаПодключения);Исключение     Сообщить("Невозможно установить соединение",СтатусСообщения.Важное);     Соединение=0;     Возврат;КонецПопытки; Команда = Новый COMОбъект("ADODB.Command");Команда.ActiveConnection = Соединение;
//текст команды - SQL запрос. Имя таблицы, в которой идет выборка это имя dbf файла без расширения
Команда.CommandText  = "SELECT * FROM MyDbfFile WHERE MyDbfFile.MyDateField='18.12.2012';";
НаборЗаписей = Новый COMОбъект("ADODB.RecordSet");НаборЗаписей = Команда.Execute();

Для i=1 По НаборЗаписей.RecordCount() Цикл    Сообщить(НаборЗаписей.Fields("Name").Value); //перебор записей, пусть, например, в dbf-е есть поле Name    НаборЗаписей.MoveNext();КонецЦикла;

НаборЗаписей=0;Команда=0;Соединение=0;


Зачем нужен именно такой ход как обращение к dbf через ODBC? Бывают dbf-ы не dBase (хотя тут пример для dBase-овских), а, например, Fox Pro-шные с memo полями и 1С их через XBase достать не может."
А почему в обходе используешь RecordCount(), а не EOF()?
Можно и EOF, тоже будет работать. А в чем критерий предпочтения того или иного варианта? Разве что для сверхогромнных таблиц данных RecordCount может выйти за границы типа Long, но dbf-ы точно такими не бывают.
Я вообще сначала хотел написать:

Для Каждого Запись Из НаборЗаписей Цикл 



А меня система обругала что нет итератора в RecordSet-е.
Ни у всех источников данных работает метод RecordCount() (SQL Pervasive например).
Да, точно. Лучше, видимо EOF, согласен. Помнится, что в MS Jet (Access) тоже определение количества записей в "рекордсете" дает какое то ненулевое значение только после принудительного применения последовательных MoveLast, MoveFirst.
Читают тему
(гостей: 1)

Быстрый переход