Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 27.03.2017
Сообщений: 12

Ошибка тут Recordset.Filter := FilterText;

06.04.2017, 13:50. Показов 3120. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем вот такой фильтр он работает.

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
procedure TForm1.Edit1Change(Sender: TObject);
var s1, s2, s3:string;
begin
 
s1:='Наименования';
s2:='Бренд';
s3:='';
 
if (form1.ComboBox2.Text=s1) and (form1.ComboBox3.Text=s2)
then
  begin
  Form1.ADOQuery1.Filtered := false;
  Form1.ADOQuery1.Filter := 'Центр like %'+Form1.Edit1.Text+'%';
  Form1.ADOQuery1.Filtered := True;
  end
  else
  if (form1.ComboBox2.Text<>s1) and (form1.ComboBox3.Text=s2)
   then
    begin
    Form1.ADOQuery1.Filtered := false;
    Form1.ADOQuery1.Filter := 'наименования like %'+Form1.ComboBox2.Text+'% and Центр like %'+Form1.Edit1.Text+'%';
    Form1.ADOQuery1.Filtered := True;
    end
    else
      if (form1.ComboBox2.Text=s1) and (form1.ComboBox3.Text<>s2)
       then
        begin
        Form1.ADOQuery1.Filtered := false;
        Form1.ADOQuery1.Filter := 'бренд like %'+Form1.ComboBox3.Text+'% and Центр like %'+Form1.Edit1.Text+'%';
        Form1.ADOQuery1.Filtered := True;
        end
          else
          begin
          Form1.ADOQuery1.Filtered := false;
          Form1.ADOQuery1.Filter := 'наименования like %'+Form1.ComboBox2.Text+'% and бренд like %'+Form1.ComboBox3.Text+'% and Центр like %'+Form1.Edit1.Text+'%';
          Form1.ADOQuery1.Filtered := True;
          end
 
end;
НО Если в поле есть значение то программа работает.
а
Если поле будет пустое то выдает такая ошибка. "Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом."

нужно сделать так чтобы при
Delphi
1
Form1.Edit.text='';
небыло этой ошибки и просто ничего не происходило и фильтр не сбрасывался и оставался в своем положении.

есть еще кнопка сброса
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button2Click(Sender: TObject);    // Кнопка сброса фильтра
 
begin
    Form1.ComboBox3.Text:='Бренд';        // Очистка
    Form1.ComboBox2.Text:='Наименования';        // Очистка
    Form1.Edit1.Text:='Центр';
    Form1.Edit6.Text:='';
    Form1.Edit7.Text:='';
    Form1.ADOQuery1.Filtered :=false;
    Form1.ADOQuery1.SQl.Clear;
    Form1.ADOQuery1.SQl.Add('select * from sklad');
    Form1.ADOQuery1.Open
end;
вот такая каша, когда я ее жму то все нормально обнуляется и ошибки нет. т.к. в поле появляться текст. а если его там нет о ошибка. Помогите советом.

ругается сюда
Delphi
1
2
3
4
5
6
7
8
9
procedure TCustomADODataSet.ActivateTextFilter(const FilterText: string);
begin
  try
    Recordset.Filter := FilterText;  // <=СЮДА
  except
    CursorPosChanged;
    raise;
  end;
end;
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.04.2017, 13:50
Ответы с готовыми решениями:

Ошибка: Filter property cannot be used for detail tables
ошибка помогите

Ошибка: Filter expression incorrectly terminated
Помогите исправить ошибку. unit Unit5; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,...

Свойства Filter и Sort в ADODB.Recordset
Вопрос: Почему при создании рекордсета на основе запроса из базы и добавления в него новых записей через AddNew можно и отфильтровать и...

8
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,670
Записей в блоге: 21
06.04.2017, 14:22
все ваши фильтры нужно засунуть в SQL запрос в раздел WHERE
и что-то мне подсказывает, что LIKE %xxx% нужно заменить на ='xxx'
1
0 / 0 / 0
Регистрация: 27.03.2017
Сообщений: 12
06.04.2017, 15:16  [ТС]
я пытался сделать это через SQL но запутался. т.к. через раз работают запросы потому что нужно в одном запросе объединить несколько а через union all работает не корректно.
Тут то все работает просто смущает ошибка. когда поле пустое.

Добавлено через 5 минут
Цитата Сообщение от krapotkin Посмотреть сообщение
что-то мне подсказывает, что LIKE %xxx% нужно заменить на ='xxx'
Нет. т.к. сразу идет поиск по первым символам которые я ввожу. а не целиком значение.
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,670
Записей в блоге: 21
06.04.2017, 16:02
где тут несколько ?
SQL
1
SELECT * FROM sklad WHERE xxxxxx
где xxxxxx точно совпадает с тем, что вы пишете в filter
если вы правильно заполняете filter то и where будет верным
0
0 / 0 / 0
Регистрация: 27.03.2017
Сообщений: 12
07.04.2017, 10:08  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
где тут несколько ?
SQL
Выделить код
1
SELECT * FROM sklad WHERE xxxx
где xxxxxx точно совпадает с тем, что вы пишете в filter
если вы правильно заполняете filter то и where будет верным
Да фильтр то работает.. просто мешает ошибка которая появляется если поле будет пустое. Читал где-то что фильтр начинает бесконечный цикл. так вот как его отключить когда поле едит пустое.
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,670
Записей в блоге: 21
07.04.2017, 13:35
filtered:=edit.text<>''
?
0
0 / 0 / 0
Регистрация: 27.03.2017
Сообщений: 12
07.04.2017, 15:30  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
filtered:=edit.text<>''
?
И? ставил я это в конце цикла. не помогло. либо я что то делаю не так.
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,670
Записей в блоге: 21
07.04.2017, 21:48
Лучший ответ Сообщение было отмечено Glo0m как решение

Решение

в конце чего?
я пропустил какие-то циклы?
0
0 / 0 / 0
Регистрация: 27.03.2017
Сообщений: 12
17.04.2017, 09:17  [ТС]
В общем проблема рещена. нужно было перелопатить код и убрать пару ошибок.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.04.2017, 09:17
Помогаю со студенческими работами здесь

Как задать в recordset.filter'е отрицание?
Вопрос об отрицании. Т.е. если фильтр поставить в таком варианте: recordset.filter= ' поле1 LIKE '%aa%' ' всё работает, если же хочу...

Редактирование поля: Recordset.edit recordset.Fields('поле') = Text1.text Recordset.update
Есть Recordset базы mdb, некоторые поля в базе пустые. Т.е. Recordset.Fields ('поле') возвращает Null. Когда пытаюсь отредактировать запись...

Проблемы с кодом Recordset.AddNew() Recordset(0) = '01/02/2002' Recordset.Update()
Recordset.AddNew() Recordset(0) = '01/02/2002' Recordset.Update() //----------дает результат 1 февраля 2002 Recordset.AddNew() ...

Передать в recordset результат SQL на основе другого recordset
Начнём с того, что пытаюсь я эту штуку сделать в Excel на ADODB. Поэтому раздел форума должен быть правильный. Задача - собрать данные...

Разница между recordset.cancel и recordset.cancelupdate
Здравствуйте! Если есть какая-либо инфорация по поводу вышеназванных методов объекта Recordset в ADO - поделитесь Заранее благодарен


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru