|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
SQLite Запрос для фильтрации
Подскажите как правильно сделать фильтрацию выдачи из базы.
Дано: dbExpress - SQlite (из одной таблицы) В listbox выводится список из полей ключевого столбца name Сделано перетаскиванием базы из DataExplorer на форму, в dataset параметр active := true и перетаскиванием стрелочки от name до listitem в редакторе BindVisually. Задача: По выбору значения из ComboBox фильтровать выдачу базы в ListBox по совпадению поля в столбце city. Столбец заполнен только значениями встречающимися в ComboBox. Как я предполагаю, это делается одним запросом query, но любезнейший гугл сказал, что dbExpress вообще фильтровать невозможно. По факту: дайте инструкцию, ссылку на мануал, код, пожалуйста. |
#2
|
|||
|
|||
Код:
SELECT * FROM tb1 WHERE city="Moscow"; |
#3
|
|||
|
|||
Ну, это если можно переоткрывать датасет.
Вообще, тут есть еще 2 решения. 1. Если фильтровать надо всегда, то тогда можно организовать Master-Detail связь. Не уверен, что стандартный ComboBox поддерживает функциональность отображения списка из источника, где выделенный элемент есть текущий элемент в БД, но сторонние компоненты такие точно есть. 2. Все DataSet-компоненты могут делать фильтрацию на клиенте - через OnFilterRecord событие. |
#4
|
|||
|
|||
задам глупый вопрос.
бросить на форму tquery параметр Active := True В String List Editor записать SELECT * FROM tb1 WHERE city="нород_нейм"; В Datasource в свойстве Dataset указать Query На кнопку пишем Query.Open Так? |
#5
|
|||
|
|||
бросить на форму tquery
параметр Active := True не сделаешь, пока запрос пуст Код:
ADOQuery1.SQL.Clear; ADOQuery1.SQL.Text:='ЗАПРОС'; ADOQuery1.ExecSQL; |
#6
|
|||
|
|||
Запутка в том, что в dbExpress нет ADO.
|
#7
|
|||
|
|||
Код:
SQLQuery1.SQL.Clear; SQLQuery1.SQL.Text:='ЗАПРОС'; SQLQuery1.ExecSQL; Последний раз редактировалось ApxaHGe1, 27.02.2017 в 11:49. |
Этот пользователь сказал Спасибо ApxaHGe1 за это полезное сообщение: | ||
DarkMoth (27.02.2017)
|
#8
|
|||
|
|||
Не вздыхайте. Только второй день курю связку Delphi + SQLite
|
#9
|
|||
|
|||
Что-то всё очень плохо и понимания через что организовать фильтрацию нет.
Всё ещё нужен ответ знающих. Сейчас есть: TSQLDataSet Active=true TAQLConnection Connected=true TBindSource DataSet =DBTable (Есть вариант выбора SQLQuerycity, но список пропадает) BindingList1 (нахрен нужен не понятно, но после перетаскивания стрелки от поля "name" до "ListBox поле Item" он появился, а вместе с этим список в ListBox сразу отобразился) SQLQuerycity Колдунства с ним результатов не дали Так вот вопрос. Что где указать и какой код на кнопку кинуть что бы по столбцу city отфильтровало? |
#10
|
|||
|
|||
Максимум чего пока добился - это
ошибка no such column: Moskow |
#11
|
|||
|
|||
Ладно, на код ругаться перестал. Но список в ListBox так и не обновляется(
Код:
SQLQuerycity.SQL.Clear; SQLQuerycity.SQL.Text:='select * from tb1 where city = "Москва"'; SQLQuerycity.ExecSQL; Table.Refresh; |
#12
|
||||
|
||||
Если из сиквэл-запроса нужно что-то получить в обратку, то вместо метода .ExecSQL следует выполнять .Open, первый нужен напр. при удалении или добавлении, либо Update, он лишь передает запрос для выполнения на сервер, при работе на пару с Select такое малоэффективно
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
ApxaHGe1 (28.02.2017)
|