2017-04-13 11 views
0

QTableViewでデータベース検索を表示するSQLiteデータベースアクセスでアプリケーションを作成しています。検索はすべての列を検索しています。今、私はセルを編集してデータベースに保存したいと思っています。私は細胞を編集することができるようですが、データは保存されません。QTとSQLiteを使用してセル編集でデータベースを更新

void MainWindow::on_search_box_textChanged(const QString &arg1) 
{ 
QSqlQueryModel *GetTable = new QSqlTableModel(ui->tableView); 

if(!arg1.isEmpty()) 
{ 
    GetTable->setQuery(QString("SELECT * FROM Cour WHERE (Date LIKE '""%"+arg1+"%""' OR Name LIKE '""%"+arg1+"%""' OR bill LIKE '""%"+arg1+"%""' OR [B O L] LIKE '""%"+arg1+"%""' OR SO LIKE '""%"+arg1+"%""' OR ETA LIKE '""%"+arg1+"%""' OR Description LIKE '""%"+arg1+"%""');")); 
    ui->tableView->setModel(GetTable); 
    ui->tableView->setAlternatingRowColors(GetTable); 
    ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); 

} 
if(arg1.isEmpty()) 
{ 
    GetTable->clear(); 
    ui->tableView->clearFocus(); 
    ui->tableView->setModel(GetTable); 
} 
} 

これはQTableViewでデータを表示するために使用するコードです。私はQSqlTableModelとQSqlQueryModelの間で変更しようとしました。ドキュメントと数時間のグーグルに基づいて、セルの編集時にQTableViewがデータベースを更新するかのように見えます。私は何かを欠いているに違いない。

まず、プライマリキーのないデータベースが原因である可能性があると考えましたが、どちらの場合も状況は同じです。

答えて

1

私の問題を解決しました。私が見逃していたのは、正しく作成されたクエリを持つsetFilter()でした。 QSqlTableModel

たちは"Select * FROM tablename"あるWHERE SQLクエリの一部とsetTable()あるsetFilter()を使用する必要がありますQSqlQueryModelsetQuery()に反対するとして。 QTableViewでテーブルを編集できるようにするには、setEditStrategy()を使うだけです。私が必要としたのはsetEditStrategy(QSqlTableModel::OnFieldChange)でした。

void MainWindow::on_search_box_textChanged(const QString &arg1) 
{ 
QSqlTableModel *GetTable = new QSqlTableModel(ui->tableView); 

if(!arg1.isEmpty()){ 
    GetTable->setTable("DHL"); 
    GetTable->setEditStrategy(QSqlTableModel::OnFieldChange); 
    GetTable->setFilter(QString("Date LIKE '""%"+arg1+"%""' OR Name LIKE '""%"+arg1+"%""' OR bill LIKE '""%"+arg1+"%""' OR [B O L] LIKE '""%"+arg1+"%""' OR SO LIKE '""%"+arg1+"%""' OR ETA LIKE '""%"+arg1+"%""' OR Description LIKE '""%"+arg1+"%""';")); 
    GetTable->select(); 

    QTableView *tableview = new QTableView(); 
    ui->tableView->setModel(GetTable); 
    ui->tableView->hideColumn(7); // don't show the ID 
    ui->tableView->setAlternatingRowColors(GetTable); 
    ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); 
    ui->tableView->show(); 
} 
else 
{ 
    GetTable->clear(); 
    ui->tableView->clearFocus(); 
    ui->tableView->setModel(GetTable); 
} 

誰かが役に立つと願っています。

関連する問題