2016-05-29 6 views
0

Ich versuche, meinem Projekt eine einfache Suchfunktion hinzuzufügen, also habe ich eine Suchleiste und eine Suchschaltfläche erstellt. Wenn diese Schaltfläche angeklickt wird, möchte ich eine Datenbank abfragen und die Ergebnisse in einem Tabellensichtwidget anzeigen.QSqlQuery und Tabellenansicht verwenden

Allerdings verstehe ich immer noch nicht ganz, wie man Daten zur Tabelle hinzufügt, ich habe versucht, eine QsqlQuery zu erstellen und die setQuery-Methode des Tabellenwidgets zu verwenden, aber wenn ich auf die Suchschaltfläche klicke, passiert nichts. Was mache ich falsch?

Hier ist mein Code.

def searchEvent(self): 
    ''' 
    Send appropriate search query and display results on the tableView 
    ''' 
    # Connect to the database 
    db = QtSql.QSqlDatabase.addDatabase("QSQLITE") 
    db.setDatabaseName("data.sqlite3") 
    db.open() 

    # Prepare query 
    query = QtSql.QSqlQuery(db) 
    query.prepare("SELECT * FROM SetInfo_view WHERE Name LIKE(?)") 
    query.bindValue(0, self.searchLineEdit.text()) 

    # Prepare table model 
    tableModel = QtSql.QSqlQueryModel() 
    tableModel.setQuery(query) 
    self.tableView.setModel(tableModel) 
    self.tableView.show() 
    db.close() 

Vielen Dank im Voraus.

Antwort

0

Nach Lesen der Dokumentation fand ich heraus, dass es notwendig ist, um die Abfrage tatsächlich ausgeführt werden, bevor es als Modell der Tabellenansicht hinzufügen, etwa so:

def searchEvent(self): 
    ''' 
    Send appropriate search query and display results on the tableView 
    ''' 
    # Connect to the database 
    db = QtSql.QSqlDatabase.addDatabase("QSQLITE") 
    db.setDatabaseName("data.sqlite3") 
    db.open() 

    # Prepare query 
    query = QtSql.QSqlQuery(db) 
    query.prepare("SELECT * FROM SetInfo_view WHERE Name LIKE(?)") 
    query.bindValue(0, self.searchLineEdit.text()) 
    query.exec_() 

    # Prepare table model 
    tableModel = QtSql.QSqlQueryModel() 
    tableModel.setQuery(query) 
    self.tableView.setModel(tableModel) 
    self.tableView.show() 
    db.close() 

Quelle: TableView in QT5 doesn't show MYSQL Data, just empty rows are shown