Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 1
Регистрация: 11.04.2018
Сообщений: 108

Фильтрация в сетке

14.12.2019, 15:57. Показов 3158. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На форме имеется 3 компонента CheckBox и Edit, в него вводится "условие поиска". Мне необходимо чтобы при выборе 1 переключателя в сетке отобразилась запись с введенным номером, при выборе 2 отобразились записи с введенный видом документа, и при выборе 3 с введенной организации. Не понимаю как написать условие какой выбран переключатель и отфильтровать по нужному полю. В таблице в БД есть такие поля (number,vid, organ).
Наглядно, что хочу реализовать показано на картинке
Изображения
 
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.12.2019, 15:57
Ответы с готовыми решениями:

Движение по сетке
Необходимо двигать квадрат по размеченной сетке, чтобы движение было зацикленным, в одну сторону. Есть следущий код для таймера, но в...

Объекты на сетке
Здравствуйте. Создавал уже подобную тему на WPF, но там никто к сожалению не ответил. Суть такова: нужно сделать некий визуальный...

Привязка к сетке.
Простите, а как сделать так чтобы при изменении размеров сетки в таблице не изменялись размеры рисунка или OLE объекта, встроенного в эту...

40
0 / 0 / 1
Регистрация: 11.04.2018
Сообщений: 108
18.12.2019, 20:26  [ТС]
Студворк — интернет-сервис помощи студентам
не подскажете еще, что не так написал в запросе для отображения данных? Нужно отобразить номер, наименование, наименование организации, дату, и путь к файлу
Запрос:
SQL
1
2
3
SELECT NUMBER,naim,naim_organ,data_podpis,file_path FROM types
INNER JOIN (izdan INNER JOIN document ON izdan.id_organ=document.id_organ)
ON types.id_type=document.id_type
Структура БД:
Миниатюры
Фильтрация в сетке  
0
 Аватар для Пытливый
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
19.12.2019, 01:28
Так-то все правильно, но inner join предполагает обязательное наличие данных в соединяемых таблицах и если в вашей связке из трех таблиц хотя-бы один ключ отсутствует то не отобразится вся связка, т.е. если для документа есть издание, но нет типа, не отобразится и документ.
А в чем проблема?
0
Модератор
 Аватар для D1973
9946 / 6481 / 2460
Регистрация: 21.01.2014
Сообщений: 27,464
Записей в блоге: 3
19.12.2019, 04:36
Цитата Сообщение от Егор Ю Посмотреть сообщение
не знаю как скопировать БД
Если сервер доступен с этой самой "другой станции" - не надо ничего никуда переносить - все будет и так работать, если нет - то и переносить бесполезно без подробной информации о настройках самого сервера и экземпляра SQL Server...
А вообще, SQL Server, как и Oracle - не самая лучшая платформа для "таскания туда-сюда" баз данных, это, как ни крути, корпоративное решение... А вот SQLite, Firebird/Interbase - самое оно... Access - тоже из этой оперы, но не советовал бы с ним связываться без крайней на то необходимости...
0
5998 / 4573 / 1096
Регистрация: 29.08.2013
Сообщений: 28,248
Записей в блоге: 3
19.12.2019, 08:55
Цитата Сообщение от Егор Ю Посмотреть сообщение
не подскажете еще, что не так написал в запросе для отображения данных?
синтаксис не тот

вот так надо
T-SQL
1
2
3
4
SELECT NUMBER,naim,naim_organ,data_podpis,file_path 
FROM types 
INNER JOIN document ON types.id_type=document.id_type
INNER JOIN izdan ON izdan.id_organ=document.id_organ
плюс не забывайте использовать алиасы для таблиц
0
0 / 0 / 1
Регистрация: 11.04.2018
Сообщений: 108
19.12.2019, 10:23  [ТС]
Вот такая ошибка
Изображения
 
0
 Аватар для Мудрый Ижик
32 / 26 / 7
Регистрация: 18.10.2019
Сообщений: 187
19.12.2019, 10:54
синтаксис не тот
Этакие, несколько непривычные запросы порождает Акцесс, но они вполне рабочие.
Вот такая ошибка
В вашем запросе id_type присутствует в 2 разных таблицах и без указания имени таблицы вы будете получать такую ошибку. Т.е. вы должны написать явно types.id_type или document.id_type
0
5998 / 4573 / 1096
Регистрация: 29.08.2013
Сообщений: 28,248
Записей в блоге: 3
19.12.2019, 12:14
Цитата Сообщение от Мудрый Ижик Посмотреть сообщение
Этакие, несколько непривычные запросы порождает Акцесс, но они вполне рабочие
ТС на 1 странице пишет что у него MSSQL
0
 Аватар для Пытливый
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
19.12.2019, 21:13
Возможно и MSSQL, но приведенный запрос явно из Акцеса выдернут, скорее всего Мудрый Ижик прав, я тоже больше нигде не встречал такого странного оформления запросов с джойнами.
0
20.12.2019, 08:46

Не по теме:

я согласен про аксесс - только он делает такие скобочки

0
0 / 0 / 1
Регистрация: 11.04.2018
Сообщений: 108
20.12.2019, 12:42  [ТС]
Цитата Сообщение от Мудрый Ижик Посмотреть сообщение
Т.е. вы должны написать явно types.id_type или document.id_type
я так и написал

Добавлено через 21 секунду
а как по другому можно написать запрос?
0
 Аватар для Мудрый Ижик
32 / 26 / 7
Регистрация: 18.10.2019
Сообщений: 187
20.12.2019, 13:49
я так и написал
Если вы в запросе ничего не поменяли, то не написали, более того в списке полей, которые вы возвращаете из запроса id_type вообще нет ни в каком виде, значит либо вы пытаетесь обратится к несуществующему полю, либо у вас в дизайнере сформирован список полей, содержащий ссылку на несуществующее поле id_type
0
0 / 0 / 1
Регистрация: 11.04.2018
Сообщений: 108
23.12.2019, 00:26  [ТС]
У меня не получается написать правильный запрос. Может может кто-нибудь помочь составить правильно запрос?

Добавлено через 3 часа 55 минут
Не подскажете как правильно должен выглядеть запрос?
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
23.12.2019, 09:11
Егор Ю, судя по количеству постов, эту тему еще долго будут мучить, пока не будет выложен файл базы данных.
Без этого ничего не получится, т.к. правильный запрос уже был показан в посте #24. А если запрос, который по приведенной структуре синтаксически верный, даёт ошибку, то понять откуда она такая взялась может только выложенная сюда реальная БД.
1
0 / 0 / 1
Регистрация: 11.04.2018
Сообщений: 108
23.12.2019, 20:50  [ТС]
Вот база данных, искренне надеюсь на помощь
Вложения
Тип файла: rar БД.rar (180.2 Кб, 3 просмотров)
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
23.12.2019, 21:26
Запрос, который привел qwertehok в посте #24 выполняется правильно (см. картинку).
Следовательно, проблема в самом проекте и, скорее всего, связана с ADOQuery2.
Может быть в редакторе полей (Fields Editor) есть какие-то поля, а нужного нет.
Впрочем, это лишь догадка. Поэтому проект нужен тоже.
Миниатюры
Фильтрация в сетке  
1
0 / 0 / 1
Регистрация: 11.04.2018
Сообщений: 108
23.12.2019, 21:30  [ТС]
Вот проект:
Вложения
Тип файла: rar DPM.rar (355.0 Кб, 3 просмотров)
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
23.12.2019, 22:41
Лучший ответ Сообщение было отмечено Егор Ю как решение

Решение

Чтобы получить результат как на картинке ниже, надо:

- в ADOQuery2 удалить из редактора полей все поля (должно быть пусто);

- разместить в его свойстве SQL такой запрос:
T-SQL
1
2
3
4
SELECT document.*,  types.*, izdan.*
FROM types 
INNER JOIN document ON types.id_type=document.id_type
INNER JOIN izdan ON izdan.id_organ=document.id_organ
(в результате будут возвращены данные по всем полям, которые нужны и в других местах)

- в базе нужно заменить типы данных: в тбл. document поле file_path с text на varchar(150). Чтобы в гриде показывались пути, а не слово [MEMO]; желательно в поле data_podpis с datetime на date, т.к. время всё равно не используется;
- чтобы в DBGrid отображались наименования, а не идентификаторы (числа), заменить наименование полей для полей Вид и Организация (на картинке правее видно какие поля в редакторе колонок грида).
Миниатюры
Фильтрация в сетке  
1
0 / 0 / 1
Регистрация: 11.04.2018
Сообщений: 108
23.12.2019, 22:49  [ТС]
Огромное Вам спасибо, всё правильно отображает, правда теперь не работает поиск
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
23.12.2019, 23:49
Поиск и фильтрация - несколько разные функциональности.
Фильтрация подразумевает ограничение результата запроса по условиям, а поиск не ограничивает результат и устанавливает указатель на строку, где найдены запрошенные для поиска данные.

Т.е. надо чётко представлять что нужно в этом проекте:
показывать только те строки, в которых есть нужные данные (ограничение по условиям) или
просто указать первую попавшуюся строку, где эти данные есть, не скрывая остальные строки.

Добавлено через 26 минут
Егор Ю, ниже приведены процедуры, в одной из которых реализована фильтрация, а в другой сброс фильтра:

Кликните здесь для просмотра всего текста
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
const
  TXT : String =
    'SELECT document.*,  types.*, izdan.* '+
    'FROM types '+
    'INNER JOIN document ON types.id_type=document.id_type '+
    'INNER JOIN izdan ON izdan.id_organ=document.id_organ ';
 
...
 
procedure TForm1.Button4Click(Sender: TObject);
var
  F : string;
begin
  if RadioGroup1.ItemIndex = -1 then Exit;
 
    //фильтрация
  case RadioGroup1.ItemIndex of
    0 : F := 'where number = '+Edit1.Text;
    1 : F := 'where naim = '+QuotedStr(Edit1.Text);
    2 : F := 'where naim_organ = '+QuotedStr(Edit1.Text);
  end;
 
  ADOQuery2.Close;
  ADOQuery2.SQL.Text := TXT + F;
  ADOQuery2.Open;
 
{ поиск закомментирован и приведен для примера
  case RadioGroup1.ItemIndex of
    0 : F := 'number';
    1 : F := 'naim';
    2 : F := 'naim_organ';
  end;
  ADOQuery2.Locate(F, edit1.Text, [loCaseInsensitive]);
}
end;
 
//сброс фильтра
procedure TForm1.Button5Click(Sender: TObject);
begin
  ADOQuery2.Close;
  ADOQuery2.SQL.Text := TXT;
  ADOQuery2.Open;
end;
1
0 / 0 / 1
Регистрация: 11.04.2018
Сообщений: 108
24.12.2019, 00:10  [ТС]
Исправил так как Вы сказали
Цитата Сообщение от Скандербег Посмотреть сообщение
в тбл. document поле file_path с text на varchar(150).
и возникла такая ошибка, что не так сделал?
Миниатюры
Фильтрация в сетке  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.12.2019, 00:10

Игра по сетке
Создал пинбол, хочу с другом поиграть по сетке, как это можно осуществить???

Сканирование по сетке
Здравствуйте, при подключении к сканеру по его ip-адресу выходит заставка для ввода пароля. Но пароля точно нет. При нажатии на кнопку ОК...

Найти пиксель в сетке
есть сетка из ректов, в функцию подается точка, можно ли как то найти ее координаты в сетке кроме как через 2 цикла по всей сетке? а то...

Выравнивание кружков в сетке
Здравствуйте, изучаю потихоньку builder c++ . Возникла такая проблемка, есть сетка, которая строится путем рисования Canvas->MoveTo и...

Отрисовка уровня по сетке
Как отрисовать все спрайты в 2d ровно как типа в марио? В ручную ровно распологать элементы блоки, кубики довольно таки сложное занятие ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru