|
Вопрос # 2 997/ вопрос открыт / |
|
Здравствуйте, эксперты!
Существует dbf файл, в записях которого много полей, в том числе DATA(дата) и WORK(W-если рабочий день,N- если не раб). Мне нужна функция, с помощью которой я мог бы находить строку/запись с определенным значением DATE и получать значение WORK из этой строки.Программа консольная.Спасибо!
 |
Вопрос задал: Mav3rick (статус: Посетитель)
Вопрос отправлен: 14 июля 2009, 20:05
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 10; последнее сообщение — 15 июля 2009, 12:47; участников в обсуждении: 3.
|
Вадим К (статус: Академик), 14 июля 2009, 22:54 [#1]:
М, а каким образом к базе подключаемся или это не важно (или хочется, что бы на любой машине подключалось) и второе - и какой ввод/вывод хочется?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Mav3rick (статус: Посетитель), 15 июля 2009, 00:43 [#2]:
1 не важно, желательно один из стандартных вариантов
2 ввод: адрес дбф; значение DATA
вывод: значение WORK на этой строчке
|
|
Тов. Женька (статус: 3-ий класс), 15 июля 2009, 10:00 [#3]:
Все дело в механизме доступа, движке БД. Проще всего такие вещи реализуются через SQL-запрос. Можно, конечно, обойтись и без запросов, но в таком случае будет потеря в скорости.
Я раньше делал так. Создавал индекс по какому либо полю (в вашем случае можно по DATE), делал этот индекс активным, применял SetRange([Date1], [Date2]), а потом, не сбрасывая Range, фильтровал данные ( в вашем случае фильтр был бы "WORK = W").
Примерно так.
|
|
Mav3rick (статус: Посетитель), 15 июля 2009, 10:14 [#4]:
можно по подробнее про индекс, пожалуйста!
|
|
Mav3rick (статус: Посетитель), 15 июля 2009, 10:19 [#5]:
было бы здорово увидеть часть кода
|
|
Тов. Женька (статус: 3-ий класс), 15 июля 2009, 10:51 [#6]:
Рабочего куска нет, так что по памяти.
procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Filtered := False; // сбрасываем фильтр на всякий случай
Table1.FilterOptions := Table1.FilterOptions + [foCaseInsensitive]; // отключаем чувствительность к регистру
// при фильтрации
Table1.IndexName := 'DATE_IDX'; // делаем наш индекс активным
Table1.SetRange([D1],[D2]); // теперь по этому индексу устанавливаем диапазон
// записи отбираются в пределах значений D1 и D2
Table1.Filter := 'WORK = ''Вакантная'''; // устанавливаем фильтр, обратите внимание на кавычки
// т.к. поле текстовое
Table1.Filtered := True; // активируем фильтр
end;
Замечания:
1. В качестве DATE_IDX нужно указать ваше имя индекса по полю DATE.
2. D1 и D2 указываете нужные даты.
|
|
Mav3rick (статус: Посетитель), 15 июля 2009, 11:01 [#7]:
спасибо, будем разбираться.
|
|
Mav3rick (статус: Посетитель), 15 июля 2009, 11:14 [#8]:
еще один вопрос: к чему прикрепить Table1? У меня консольная программа.
|
|
Тов. Женька (статус: 3-ий класс), 15 июля 2009, 11:26 [#9]:
Ни к чему. Ручками, ручками вывод делать.
|
|
Вадим К (статус: Академик), 15 июля 2009, 12:47 [#10]:
я бы воспользовался бы компонентом TDbf. Он как минимум независим от внешних библиотек. А во вторых, это был единственный компонент, которым мне удалось подобрать кодировку для одной базы, которая была создана неведомо чем. Правда пришлось ручками править компонент. Скорость работы более чем достаточная. Основная особенность - можно открыть определённый файл без каких либо алиасов и рассматривать таблицу просто как массив записей (иногда это очень удобно)
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|