Задать вопрос
@pypyshka

Как при двойном клике по строке в таблице произвести поиск из другой таблицы?

Добрый день.
Не получается сделать поиск при двойном клике по строке. В Qt Designer нарисовал окно с таблицей tableView_1. В эту таблицу выводятся данные из БД из Таблицы 1.

Таблица 1 (dbtable_1):
name | quantity | id
Картофель | 10 | А1
Огурцы | 5 | A2

Есть еще в БД Таблица 2 (dbtable_2):
producer | city | id
Фермер 1 | Москва | А1
Фермер 2 | Санкт-Петербург | А2

Для tableView_1 задано значение SelectRows для свойства selectionBehavior. При двойном клике по строке происходит следующее:
def result(mod_inx):
    #Модальное окно
    modal_window = QtWidgets.QWidget(main_window, QtCore.Qt.Window)
    modal_window.setWindowTitle("Модальное окно")
    modal_window.setMinimumSize(700, 500)
    modal_window.setWindowModality(QtCore.Qt.WindowModal)
    modal_window.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)

    #Подключение к БД
    DB_connect = QtSql.QSqlDatabase.addDatabase("QSQLITE")
    DB_connect.setDatabaseName("test.db")
    DB_connect.open()

    #Запрос к БД: из таблицы dbtable_2 выводим все строки
    result_model = QtSql.QSqlQueryModel(parent = None)
    result_model.setQuery("SELECT producer, city, id FROM dbtable_2")

    #Модель
    vbox = QtWidgets.QVBoxLayout()
    table_result = QtWidgets.QTableView()
    table_result.setModel(result_model)
    vbox.addWidget(table_result)
    table_result.resizeColumnsToContents()
    table_result.horizontalHeader().setStretchLastSection(True)
    modal_window.setLayout(vbox)
    modal_window.show()

    #Значения строки, столбца
    row = mod_inx.row()
    column = mod_inx.column()

    #Значение id из dbtable_2
    id_search =  main_window.tableView_1.model().index(row, 2).data()

В данном случае, при двойном клике по строке открывается окно с таблицей, в которой выводятся все строки из dbtable_2, а так же получаем значение id этой строки. Я же хочу сделать, чтобы при двойном клике по строке, мы брали значение id этой строки и в окне выводили записи из dbtable_2 только с этим id. Можно ли как-нибудь сделать это через "WHERE id LIKE (?)" или "WHERE id = ..."?
  • Вопрос задан
  • 667 просмотров
Подписаться 1 Оценить 1 комментарий
Решения вопроса 1
@Sergey6661313
1) #Значение id из dbtable_2 необходимо выяснить до того как вы его вызовете.
#Значения строки, столбца
    row = mod_inx.row()
    column = mod_inx.column()

    #Значение id из dbtable_2
    id_search =  main_window.tableView_1.model().index(row, 2).data()
нужно поставить в начало функции а не в конец...

2) запрос это текст вот и операторы используйте как для текста:
query = "SELECT * FROM dbtable_2 WHERE id = " + str(id_search)
result_model.setQuery(query)


3) предлагаю использовать peewee для чтения и записи sqlite таблиц (на хабре есть примеры). Он быстрый и удобный.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы