Фильтрация по дате в DBGrid

<< < (2/3) > >>

dines:
Спасибо за вставку из книги:)
Про СКЛ, примерно так же уже думал, но у меня конкретно в этом приложении нет компанетна Query, а есть только Table, по этому хотелось бы обойтись без СКЛ-запросов..

В том то и дело, что ошибка выдаётся такая : "dat' is not a valid integer value' - из чего я могу предположить что в таблице в поле по которому сравнимаем лежат данные типа Integer (это так и есть) и соответственно что бы что то с этими данными сравнить, нужно это что-то иметь тоже в формате Integer. Что я и делаю: int dat=201106. А он не понимает и пишет ошибку (выше красным выделена). Вот я и думаю что буилдер не понимает что я ему переменную подсовываю, а думает что я ему вместо целого числа кладу букавки "dat". Почему он не поймёт что это объявленная ранее переменная в нужном формате Integer? Я так понимаю потому что синтаксис другой (а какой я не знаю) для вписывания переменных в строку Filter таблицы Table.

L0rd:
попробуй так:
Table1->Filter=" DatForFilt = "+dat
дело в том, что он не видит переменную ты ее сделал строкой и пытаешься туда же всунуть инт

dines:
Вот, точно, в этом и дело!
Но правильно будет так: Код:

Table1->Filter="DatForFilt='"+dat+"'"
- вот она, правильная конструкция:)
Правда есть загвозда, даже такая конструкция не работала, а точнее даже не компилилась, но стоило только поменять тип dat на AnsiString, как всё заработало! Значит с синтаксисом разобрались, но теперь осталась для меня загадкой, почему компилятор ругался на переменную типа Int в описательной строке фильтра. Ну и пофиг, главное что сейчас рабочая конструкция найдена.

L0rd, спасибо за дельные мысли!

Tantos:
Цитата: dines от 05 Июль 2011, 14:08:17

но теперь осталась для меня загадкой, почему компилятор ругался на переменную типа Int в описательной строке фильтра.

Потому что вы пытались скрестить ужа с ежом: Filter имеет тип AnsiString, а вы к нему пытались прикрутить тип int. Как минимум, надо было использовать функцию IntToStr().

P.S. Запросы с датами никогда не потеряют своей актуальности... А все в нежелании использовать параметризованные запросы...

Hammersoft:
У меня так работало:
AnsiString TableFilter += "Name <> ''";// Для простоты кодирования добавляю строку, которая всегда выполняестя
if (DateTimePicker14->Checked == true)
{
TableFilter += "and D3 >= '" + DateTimePicker14->Date + "' ";
}
if (DateTimePicker15->Checked == true)
{
TableFilter += "and D4 Б= '" + DateTimePicker15->Date + "' ";
}
Table1->Filter = TableFilter;
Table1->Filtered = true;
В пятом был глюк в том, что нельзя просто добавлять к текстовому значению Table1->Filter, добавления не работали.
А то читаю, и не знаю, где можно был найти проблему. (если выбрать дату с 01.01.2010 до 31.12.2010, то будет выбран 2010 год).

Навигация

[0] Главная страница сообщений

[#] Следующая страница

[*] Предыдущая страница