Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 997

/ вопрос открыт /

Здравствуйте, эксперты!
Существует dbf файл, в записях которого много полей, в том числе DATA(дата) и WORK(W-если рабочий день,N- если не раб). Мне нужна функция, с помощью которой я мог бы находить строку/запись с определенным значением DATE и получать значение WORK из этой строки.Программа консольная.Спасибо!

Mav3rick Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Mav3rick (статус: Посетитель)
Вопрос отправлен: 14 июля 2009, 20:05
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 10; последнее сообщение — 15 июля 2009, 12:47; участников в обсуждении: 3.
Вадим К

Вадим К (статус: Академик), 14 июля 2009, 22:54 [#1]:

М, а каким образом к базе подключаемся или это не важно (или хочется, что бы на любой машине подключалось) и второе - и какой ввод/вывод хочется?
Галочка "подтверждения прочтения" - вселенское зло.
Mav3rick

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

Mav3rick (статус: Посетитель), 15 июля 2009, 10:14 [#4]:

можно по подробнее про индекс, пожалуйста!
Mav3rick

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

Mav3rick (статус: Посетитель), 15 июля 2009, 11:01 [#7]:

спасибо, будем разбираться.
Mav3rick

Mav3rick (статус: Посетитель), 15 июля 2009, 11:14 [#8]:

еще один вопрос: к чему прикрепить Table1? У меня консольная программа.
Тов. Женька

Тов. Женька (статус: 3-ий класс), 15 июля 2009, 11:26 [#9]:

Ни к чему. Ручками, ручками вывод делать.
Вадим К

Вадим К (статус: Академик), 15 июля 2009, 12:47 [#10]:

я бы воспользовался бы компонентом TDbf. Он как минимум независим от внешних библиотек. А во вторых, это был единственный компонент, которым мне удалось подобрать кодировку для одной базы, которая была создана неведомо чем. Правда пришлось ручками править компонент. Скорость работы более чем достаточная. Основная особенность - можно открыть определённый файл без каких либо алиасов и рассматривать таблицу просто как массив записей (иногда это очень удобно)
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:41
Выполнено за 0.02 сек.