Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
9 / 9 / 5
Регистрация: 22.04.2015
Сообщений: 305

AdoQuery1.Filtered не фильтрует

12.08.2015, 09:04. Показов 2465. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Не срабатывает фильтр, если условие больше(меньше) или равно
Delphi
1
AdoQuery1.Filter:='[Дата]>=' + DateToStr(DateTimePicker1.Date) ;
То отрабатывает, а при условии равенства - не фильтрует(((
Необходимо от фильтровать данные по дате в таблице равной DateTimePicker1
как это сделать правильно???

Delphi
1
2
3
4
5
6
7
8
9
10
11
Form1.ADOQuery1.Close;
Form1.ADOQuery1.SQL.Clear;
Form1.AdoQuery1.SQL.Add('SELECT *FROM Бочонок'); [COLOR="blue"]//Запрос данных из таблицы "Бочонок"[/COLOR]
Form1.ADOQuery1.Open;
Form1.AdOQuery1.Active:=True;
 
//А теперь хочу от фильтровать по дате данные из таблицы "Бочонок"
Print1.Visible:=True;
AdoQuery1.Filtered :=False;
AdoQuery1.Filter:='[Дата]=' + DateToStr(DateTimePicker1.Date) ; [COLOR="Blue"]//Дата из таблицы "Бочонок" = DateTimePicker1.Date[/COLOR]
AdoQuery1.Filtered :=true;
Такой код^ дает пустой результат (не фильтрует)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.08.2015, 09:04
Ответы с готовыми решениями:

Фильтрация грида ADOQuery1.Filtered
ПОМОГИТЕ ПОЖАЛУЙСТА, НЕ РАБОТАЕТ ФИЛЬТР ДЛЯ ЧИСЛОВЫХ ПОЛЕЙ, И ДАТЫ. ОШИБКА"АРГУМЕНТЫ ИМЕЮТ НЕВЕРНЫЙ ТИП , ВЫХОДЯТ ЗА ПРЕДЕЛЫ ДОПУСТИМОГО...

Не фильтрует таблицу
В общем есть загруженная таблица из аксесса в делфи и мне нужно выбрать поле и отобразить при нажатии на кнопку в другой форме вот код-...

New RegExp() не фильтрует
вот так ^{13,19} и так ^{13,19}$ 0000000000000004 - это число проходить онлайн проверку.

6
Модератор
 Аватар для D1973
9917 / 6454 / 2455
Регистрация: 21.01.2014
Сообщений: 27,389
Записей в блоге: 3
12.08.2015, 14:16
Зачем лишние действия? Ты используешь запрос, дык и запрашивай нужные даные...
Delphi
1
2
3
4
Form1.ADOQuery1.Close;
Form1.ADOQuery1.SQL.Clear;
Form1.AdoQuery1.SQL.Add('SELECT *FROM [Бочонок] WHERE [Дата]=' + DateToStr(DateTimePicker1.Date));
Form1.ADOQuery1.Open;
И, кстати, отвыкай от имен таблиц и полей на кирилице - избавишься от многих проблем
0
9 / 9 / 5
Регистрация: 22.04.2015
Сообщений: 305
13.08.2015, 08:41  [ТС]
D1973, спасибо.
Дело в том что я пробовал но ругается на невозможность сравнить дату с строкой(по этой причине я решил воспользоваться фильтром),
поля [дата] - это же формат дата а DateToStr(DateTimePicker1.Date) - переводим в строковый.
если не переводить то тоже ругается, кто подскажет как это решить?
Delphi
1
2
3
4
Form1.ADOQuery1.Close;
Form1.ADOQuery1.SQL.Clear;
Form1.AdoQuery1.SQL.Add('SELECT *FROM [Бочонок] WHERE [Дата]=' + DateToStr(DateTimePicker1.Date));
Form1.ADOQuery1.Open;
0
9 / 9 / 5
Регистрация: 22.04.2015
Сообщений: 305
14.08.2015, 17:09  [ТС]
Не понимаю, решил посмотреть как выглядит результат запроса по полю Дата
пишу в конце процедуры (после запроса)
Delphi
1
Showmessage(ADOQuery1.FieldbyName(Дата).AsString);
результат сообщения:
Пустота!
хотя в таблице есть данные в поле 'Дата' 14.08.2015
может по этой причине не фильтрует, почему тога запрос не выдает Дату из таблицы?
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,600
15.08.2015, 02:13
Цитата Сообщение от Granfury Посмотреть сообщение
Дело в том что я пробовал но ругается на невозможность сравнить дату с строкой
1) Формат полей должен Datetime = Дата/Время
2)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.BitBtn1Click(Sender: TObject);
 var
  DateField : TDatetime;
begin
  with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Append('select * from Имя_таблиц where cast(Ваши_поля as date) =:DTColums');
    DateField := trunc(DateTimePicker1.Date);
    Parameters.ParamByName('DTColums').Value := DateField;
    SQL.Append('order by 1 asc');
    Open;
  end;
end;
Не знаю какой СУБД если тип поля Date то CAST не нужно
1
Модератор
 Аватар для D1973
9917 / 6454 / 2455
Регистрация: 21.01.2014
Сообщений: 27,389
Записей в блоге: 3
15.08.2015, 07:56
Лучший ответ Сообщение было отмечено Granfury как решение

Решение

Granfury, прежде всего советую посмотреть, как этот запрос делает сам Access
1. Создаем в БД новый запрос, в конструкторе ставим критерий отбора для поля даты(рис. 1)
2. Переходим из режима конструктора в режим SQL и видим, к какому виду Access привел нашу нормально введенную дату (рис. 2)
3. Осталось записать это на Delpi. Код под спойлером, результат работы на рис. 3 (все записи) и 4 (отбор по дате)
Код для RAD XE3
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Data.Win.ADODB, Vcl.Grids,
  Vcl.DBGrids, Vcl.StdCtrls, Vcl.ComCtrls, {Добавить этот модуль ->}System.DateUtils;
 
type
  TForm1 = class(TForm)
    DateTimePicker1: TDateTimePicker;
    Button1: TButton;
    Button2: TButton;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Q: TADOQuery;
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private { Private declarations }
    procedure DoSQL(_sql : string; Mode : boolean); //Добавили свой метод выполнения запроса
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var s : string;
    d : TDate;
begin
 d := DateTimePicker1.Date; //Дата, взятая из DateTimePicker1
//Формируем строку даты так, как того требует Access
 s := Format('#%d/%d/%d#', [MonthOf(d), DayOf(d), YearOf(d)]);
//Выполняем запрос на отбор конкретной даты
 DoSQL('select * from t1 where dt = ' + s, true);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
 DoSQL('select * from t1', true); //Запрос на вывод всех записей
end;
 
procedure TForm1.DoSQL(_sql: string; Mode : boolean);
begin
 Q.Close; //Деактивировали ADOQuery
 Q.SQL.Clear; //Очистили строки запроса
 Q.SQL.Add(_sql); //Добавили новый запрос (первый параметр процедуры)
//В зависимости от второго параметра процедуры - разные режимы выполнения запроса
 if Mode then Q.Open else Q.ExecSQL
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var path : string;
begin
 path := ExtractFilePath(ParamStr(0)) + 'BD5.mdb'; //Путь к файлу БД
 Q.Close; //Деактивировали ADOQuery
//Задали строку подключения
 Q.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + path + ';Persist Security Info=False';
 DoSQL('select * from t1', true); //Выполнили запрос
end;
 
end.
Миниатюры
AdoQuery1.Filtered не фильтрует   AdoQuery1.Filtered не фильтрует   AdoQuery1.Filtered не фильтрует  

AdoQuery1.Filtered не фильтрует  
1
9 / 9 / 5
Регистрация: 22.04.2015
Сообщений: 305
15.08.2015, 11:18  [ТС]
xxbesoxx и D1973, спасибо за ответ!
Поняв что дело в формате, я сделал так:
В Acces поле [Дата], раздел "формат поля" оставил пустым, после чего добавляя из Delphi в Acces дату, в поле [Дата]
записывалась дата+время
по этому в Delphi исправил код (на добавления даты) с форматом только даты
Delphi
1
2
sdate:=FormatDateTime('dd.mm.yyyy',DateTimePicker2.Date); //sdate - это переменная типа string;
ADOQuery1.FieldByName('Дата').AsDateTime:=StrToDate(sdate); //Добавление даты в поле [Дата]
Таким образом в Acces добавляется запись в поля [Дата] без времени
что позволяет сделать такой запрос
Delphi
1
2
3
4
5
Form1.ADOQuery1.Close;
Form1.ADOQuery1.SQL.Clear;
Form1.ADOQuery1.SQL.Add('SELECT *FROM Бочонок WHERE Дата= ' + FormatDateTime('#dd-mm-yyyy#',DateTimePicker1.DateTime));
Form1.ADOQuery1.Open;
Form1.AdOQuery1.Active:=True;
Отрабатывает отлично!
Все дело было в формате дата+время
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.08.2015, 11:18
Помогаю со студенческими работами здесь

Умный фильтр не фильтрует
Добрый день. Есть сайтик, на нем поставили стандартный умный фильтр, отображаются и загружает все поля четко, как надо. При выборе...

не фильтрует русские буквы
Здравствуйте! Такая проблема... Вводится строка, пользоватль выбирает фильтр и вместо букв или цыфр вставляются пробелы... С латиницей, с...

Провайдер фильтрует DNSSEC?
Провайдер дом.ру блокирует к примеру домен: https://kinogo.by/ поставил себе dnscrypt-proxy, выставил в настройках require_dnssec = true ...

Не фильтрует однозначные числа
Всем доброго времени суток. Такой вопрос. Фильтрую базу по столбцу таким образом: Form1->ADOTable1->Filter=" SEC >=...

Like не фильтрует все строки
добрый день. мне надо отсеять строки, где юридическое название не является ФИО я в фильтрах ставлю and (c.JuridicalName like...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru