Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2015, 18:08   #1
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию Фильтрация с условием.

Доброго времени суток, уважаемые эксперты. Столкнулся с проблемой. Нужно реализовать фильтрацию данных в таблице по условию. Обычная фильтрация работает нормально. Например чтобы отфильтровать данные я писал так:

Код:
    DataModule1.AdoTable2.Filter:='Фамилия='''+Edit2.Text+'''';
    DataModule1.AdoTable2.Filtered:=True;
Когда стало нужно отфильтровать данные, дата которых меньше той, которая введена в компоненте DateTimePicker, то стали появляться ошибки мол не найдено данных, удовлетворяющих фильтру или неверная запись... Я пробовал разные варианты, последний был таким:

Код:
  DataModule1.AdoTable2.Filter:='Дата Рождения='''+DateToStr(DatetimePicker2.Date)+'''';
  DataModule1.AdoTable2.Filtered:=True;
Как это правильно реализовать я не знаю. Прошу Вашей помощи. И заранее спасибо всем, кто откликнется.

Вот сам проект, если понадобится:
http://rghost.ru/7Llv9tL4P
Armageddets вне форума Ответить с цитированием
Старый 09.05.2015, 18:19   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Опиши лучше событие OnFilterRecord:
Код:
procedure DataModule1.AdoTable2FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
  Accept := DataSet['Дата Рождения'].AsDateTime = DatetimePicker2.Date;
end;
Оно будет срабатывать когда включаешь фильтр. При этом текст фильтра не нужен.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.05.2015, 19:36   #3
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию

Написал следующий код:

Код:
procedure TDataModule1.ADOTable2FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
begin
  Accept := DataSet['Дата Рождения'].AsDate = form2.DatetimePicker2.Date;
end;

Но теперь появляется ошибка "Class EVariantInvalidOpError with message 'invalid variant operation' process stoped"

Я что-то неправильно сделал?
Armageddets вне форума Ответить с цитированием
Старый 09.05.2015, 20:09   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А у тебя в базе это поле какого типа?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.05.2015, 20:27   #5
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию

DateTime. Но там только дата пишется без времени. Это можно проверить в базе в примере который я выложил.
Armageddets вне форума Ответить с цитированием
Старый 09.05.2015, 20:42   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
Accept := DataSet['Дата Рождения'].AsDate = Trunc(form2.DatetimePicker2.Date);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.05.2015, 22:44   #7
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию

Пишет ошибку "invalid variant operation"
Armageddets вне форума Ответить с цитированием
Старый 09.05.2015, 22:52   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А твк:
Код:
Accept := DataSet['Дата Рождения'].AsDateTime = Trunc(form2.DatetimePicker2.Date);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.05.2015, 23:40   #9
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию

Та же самая ошибка.
Armageddets вне форума Ответить с цитированием
Старый 09.05.2015, 23:54   #10
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от Armageddets Посмотреть сообщение
Та же самая ошибка.
1) Можно било через ADOQuery писать SQL запрос
2) зачем между наименование поля пробел ?
ладно, вот так работает на ваши проекте фильтр
Код:
procedure TForm2.Button2Click(Sender: TObject);
begin
  with  DataModule1.AdoTable2 do
    begin
      Filtered := False;
      Filter := '[Дата Рождения] =' + QuotedStr(DateToStr(DateTimePicker1.DateTime));
      Filtered := True;
    end;
    if DataModule1.AdoTable2.FieldByName('Дата Рождения').AsString = '' then
    Application.MessageBox('Данных на это период не найдено','Ошибка ввода данных', MB_ICONERROR);

  end;
Изображения
Тип файла: jpg DateFilter.jpg (64.8 Кб, 124 просмотров)

Последний раз редактировалось xxbesoxx; 10.05.2015 в 00:05.
xxbesoxx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Циклы с условием TI_ProJecT Microsoft Office Excel 14 06.11.2011 17:41
CSS с условием Небесный HTML и CSS 1 14.09.2011 14:41
Формула с условием Обыватель Microsoft Office Excel 14 23.12.2010 15:21
Копирование с условием kzld Microsoft Office Excel 11 13.12.2010 10:17
Ссумирование с условием Dendy702200 Microsoft Office Access 2 26.12.2009 17:33