![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Всем привет. У меня вопрос можно ли осуществить фильтрацию данный в таблице базы Access с помощью TreeView? Ели да то как?
Последний раз редактировалось Amilman, 13.10.2011 в 18:12. |
#2
|
||||
|
||||
![]() Если я правильно понял, вы хотите в TreeView вывести имена полей из таблицы и для любого из этих полей задать ограничение?
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
||||
|
||||
![]() Лучше через запрос все делать, при нажатии на колонку выполнить запрос с order by.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#4
|
||||
|
||||
![]() Ну вот в древе у меня есть к примеру записи Водитель,Продавец,Кассир при нажатии на Водителя мне надо чтобы в Grid остались записи только водителей.
|
#5
|
|||
|
|||
![]() Тут надо знать как организована база.
Если в соответсвии с НФ3, то это будет выглядеть как-то так: 1. Таблица справочника должностей: Код:
ID | Position ---|------------- 1 | Водитель 2 | Кассир ... 2. Основная таблица, например, список сотрудников: Код:
ID | Position_ID | FIO ---+-------------+------------------ 1 | 1 | Иванов Иван Иванович 2 | 1 | Пертов Петр Петрович ... тогда нам надо: 1. Вывести в TreeView все записи из табл. Position. Значение поля ID можно "положить" в свойство Data узлов. 2. При выделении узла (OnChange, если не ошибаюсь) надо сформировать новый запрос к основной таблице с соотв. Код будет примерно такой: Код:
ADOQuery1.Close; ADOQuery.SQL.Text := 'SELECT * FROM Emloyee WHERE Position_ID =' + IntToStr(Integer(TreeView1.Selected.Data)); ADOQuery1.Open; Есть возможность сразу получить весь список и фильтровать его динамически на стороне клиента в событии OnFilter компонента доступа к данным. Но данный фокус можно использовать только в случае, когда выборка из основной таблицы ГАРАНТИРОВАННО небольшая и редко меняющаяся (например, список сотрудников в отделе кадров, если это список свободных сотрудников, то уже есть ограничения). Последний раз редактировалось lmikle, 14.10.2011 в 09:10. |
#6
|
||||
|
||||
![]() Фильтрация неполучается. Использую событие TreeView1Change :
Код:
DataModule1.ADOQuery1.Close; DataModule1.ADOQuery1.SQL.Text := 'SELECT * FROM Работники WHERE Подразделение' + string(Integer(TreeView1.Selected.Data)); Но при запуске программы и при выборе записи в TreeView ничего не происходит. P.S Дерево в TreeView заполняется из txt файла. |
#7
|
||||
|
||||
![]() А вы бы посмотрели в отладчике и увидели, что явно знака равенства не хватает в условии. Так попробуйте:
Код:
DataModule1.ADOQuery1.Close; DataModule1.ADOQuery1.SQL.Text := 'SELECT * FROM Работники WHERE Подразделение = ' + string(Integer(TreeView1.Selected.Data)); Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#8
|
||||
|
||||
![]() Добавил '=' но в гриде нет изменений.
|
#9
|
||||
|
||||
![]() А вы запрос то выполняете?
Код:
DataModule1.ADOQuery1.Open; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#10
|
||||
|
||||
![]() Ошибка синтаксиса (Пропущен оператор) в выражении запроса 'Подразделение ='
|
#11
|
||||
|
||||
![]() Сделал так :
Код:
DataModule1.ADOQuery1.SQL.Text:= 'SELECT * FROM Работники WHERE Подразделение = "' + string(Integer(TreeView1.Selected.Data)) + '"'; |
#12
|
||||
|
||||
![]() Либо что-то не так либо лыжи не едут. Ну не может он у вас не меняться при выполнении такого запроса. Если предположить, что Подразделение текстовое поле, то вы сейчас отбираете в тексте числовые значения. Я сомневаюсь, что у вас подразделение может быть равно "1" или "2" и как следствие грид должен быть пустым.
Если-же это числовой кодификатор, то опять-же сравнение числа и текста у вас должно порождать ошибку и как минимум ничего не выведется в гриде. Так-что у меня есть подозрение, что для грида вы просто используете другой источник данных. Вот и не меняется у вас ничего в гриде. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#13
|
||||
|
||||
![]() Ну в 'Подразделение' к примеру заносится 'МОП' и я выбираю МОП TreeView но ничего не происходит.
Код:
DataModule1.ADOQuery2.SQL.Text:= 'SELECT * FROM Работники WHERE Подразделение = "' + string(TreeView1.Selected.Data) + '"'; Переподключил таблицу но результат остался темже. Или я как текст не правильно объявил? |
#14
|
||||
|
||||
![]() А вы не пробовали смотреть в режиме отладки, что у вас получается в DataModule1.ADOQuery2.SQL.Text ?
В гриде DataSource точно на DataModule1.ADOQuery2 смотрит? Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#15
|
||||
|
||||
![]() Цитата:
Да DataSource смотрит на DataModule1.ADOQuery2. Сделал столбец числовым тогда ругается на несовместимость данных ну или типа того. |