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

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

14.12.2019, 15:57. Показов 3167. Ответов 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
9949 / 6484 / 2461
Регистрация: 21.01.2014
Сообщений: 27,474
Записей в блоге: 3
19.12.2019, 04:36
Цитата Сообщение от Егор Ю Посмотреть сообщение
не знаю как скопировать БД
Если сервер доступен с этой самой "другой станции" - не надо ничего никуда переносить - все будет и так работать, если нет - то и переносить бесполезно без подробной информации о настройках самого сервера и экземпляра SQL Server...
А вообще, SQL Server, как и Oracle - не самая лучшая платформа для "таскания туда-сюда" баз данных, это, как ни крути, корпоративное решение... А вот SQLite, Firebird/Interbase - самое оно... Access - тоже из этой оперы, но не советовал бы с ним связываться без крайней на то необходимости...
0
5999 / 4574 / 1096
Регистрация: 29.08.2013
Сообщений: 28,250
Записей в блоге: 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
5999 / 4574 / 1096
Регистрация: 29.08.2013
Сообщений: 28,250
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru