Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.02.2017, 07:56
DarkMoth DarkMoth вне форума
Прохожий
 
Регистрация: 06.11.2016
Сообщения: 22
Версия Delphi: 10.1 Berlin
Репутация: 10
По умолчанию SQLite Запрос для фильтрации

Подскажите как правильно сделать фильтрацию выдачи из базы.

Дано:
dbExpress - SQlite (из одной таблицы)
В listbox выводится список из полей ключевого столбца name
Сделано перетаскиванием базы из DataExplorer на форму, в dataset параметр active := true и перетаскиванием стрелочки от name до listitem в редакторе BindVisually.

Задача:
По выбору значения из ComboBox фильтровать выдачу базы в ListBox по совпадению поля в столбце city. Столбец заполнен только значениями встречающимися в ComboBox.

Как я предполагаю, это делается одним запросом query, но любезнейший гугл сказал, что dbExpress вообще фильтровать невозможно.

По факту: дайте инструкцию, ссылку на мануал, код, пожалуйста.
Ответить с цитированием
  #2  
Старый 27.02.2017, 10:50
ApxaHGe1 ApxaHGe1 вне форума
Активный
 
Регистрация: 08.04.2008
Адрес: Нижний новгород
Сообщения: 311
Репутация: 38
По умолчанию

Код:
SELECT * FROM tb1 WHERE city="Moscow";
не?
Ответить с цитированием
  #3  
Старый 27.02.2017, 11:12
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, это если можно переоткрывать датасет.
Вообще, тут есть еще 2 решения.
1. Если фильтровать надо всегда, то тогда можно организовать Master-Detail связь. Не уверен, что стандартный ComboBox поддерживает функциональность отображения списка из источника, где выделенный элемент есть текущий элемент в БД, но сторонние компоненты такие точно есть.
2. Все DataSet-компоненты могут делать фильтрацию на клиенте - через OnFilterRecord событие.
Ответить с цитированием
  #4  
Старый 27.02.2017, 11:18
DarkMoth DarkMoth вне форума
Прохожий
 
Регистрация: 06.11.2016
Сообщения: 22
Версия Delphi: 10.1 Berlin
Репутация: 10
По умолчанию

задам глупый вопрос.

бросить на форму tquery
параметр Active := True
В String List Editor записать SELECT * FROM tb1 WHERE city="нород_нейм";
В Datasource в свойстве Dataset указать Query

На кнопку пишем
Query.Open

Так?
Ответить с цитированием
  #5  
Старый 27.02.2017, 11:27
ApxaHGe1 ApxaHGe1 вне форума
Активный
 
Регистрация: 08.04.2008
Адрес: Нижний новгород
Сообщения: 311
Репутация: 38
По умолчанию

бросить на форму tquery
параметр Active := True
не сделаешь, пока запрос пуст


Код:
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='ЗАПРОС';
ADOQuery1.ExecSQL;
Это пример на АДО... думаю разницы ни какой, ну а где отображать результат Datasource = Query
Ответить с цитированием
  #6  
Старый 27.02.2017, 11:31
DarkMoth DarkMoth вне форума
Прохожий
 
Регистрация: 06.11.2016
Сообщения: 22
Версия Delphi: 10.1 Berlin
Репутация: 10
По умолчанию

Запутка в том, что в dbExpress нет ADO.
Ответить с цитированием
  #7  
Старый 27.02.2017, 11:36
ApxaHGe1 ApxaHGe1 вне форума
Активный
 
Регистрация: 08.04.2008
Адрес: Нижний новгород
Сообщения: 311
Репутация: 38
По умолчанию

Код:
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Text:='ЗАПРОС';
SQLQuery1.ExecSQL;

Последний раз редактировалось ApxaHGe1, 27.02.2017 в 11:49.
Ответить с цитированием
Этот пользователь сказал Спасибо ApxaHGe1 за это полезное сообщение:
DarkMoth (27.02.2017)
  #8  
Старый 27.02.2017, 11:48
DarkMoth DarkMoth вне форума
Прохожий
 
Регистрация: 06.11.2016
Сообщения: 22
Версия Delphi: 10.1 Berlin
Репутация: 10
По умолчанию

Не вздыхайте. Только второй день курю связку Delphi + SQLite
Ответить с цитированием
  #9  
Старый 27.02.2017, 20:13
DarkMoth DarkMoth вне форума
Прохожий
 
Регистрация: 06.11.2016
Сообщения: 22
Версия Delphi: 10.1 Berlin
Репутация: 10
По умолчанию

Что-то всё очень плохо и понимания через что организовать фильтрацию нет.

Всё ещё нужен ответ знающих.

Сейчас есть:
TSQLDataSet
Active=true

TAQLConnection
Connected=true

TBindSource
DataSet =DBTable (Есть вариант выбора SQLQuerycity, но список пропадает)

BindingList1 (нахрен нужен не понятно, но после перетаскивания стрелки от поля "name" до "ListBox поле Item" он появился, а вместе с этим список в ListBox сразу отобразился)

SQLQuerycity
Колдунства с ним результатов не дали

Так вот вопрос. Что где указать и какой код на кнопку кинуть что бы по столбцу city отфильтровало?
Ответить с цитированием
  #10  
Старый 27.02.2017, 21:44
DarkMoth DarkMoth вне форума
Прохожий
 
Регистрация: 06.11.2016
Сообщения: 22
Версия Delphi: 10.1 Berlin
Репутация: 10
По умолчанию

Максимум чего пока добился - это
ошибка no such column: Moskow
Ответить с цитированием
  #11  
Старый 27.02.2017, 22:08
DarkMoth DarkMoth вне форума
Прохожий
 
Регистрация: 06.11.2016
Сообщения: 22
Версия Delphi: 10.1 Berlin
Репутация: 10
По умолчанию

Ладно, на код ругаться перестал. Но список в ListBox так и не обновляется(

Код:
  SQLQuerycity.SQL.Clear;
  SQLQuerycity.SQL.Text:='select * from tb1 where city = "Москва"';
  SQLQuerycity.ExecSQL;
  Table.Refresh;
Ответить с цитированием
  #12  
Старый 28.02.2017, 13:55
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Если из сиквэл-запроса нужно что-то получить в обратку, то вместо метода .ExecSQL следует выполнять .Open, первый нужен напр. при удалении или добавлении, либо Update, он лишь передает запрос для выполнения на сервер, при работе на пару с Select такое малоэффективно
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
ApxaHGe1 (28.02.2017)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:21.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter