2017-05-27 20 views
0

QTableViewから選択したアイテムを取得し、データベースから削除するコードを作成しようとしています。クエリがありません行をフェッチできません

QModelIndex index = ui->tableView->selectionModel()->currentIndex(); 

QString value= ui->tableView->model()->data(index).toString(); 
qDebug() << "Value : " << value; 

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
db.setDatabaseName("TestDatabase.db"); 

if(!db.open()) 
{ 
    qDebug() << db.lastError(); 
    qFatal("Failed to connect"); 
} 
QSqlQuery qry; 
qry.prepare("DELETE * FROM movies WHERE Title='"+value+"'"); 

if(!qry.exec()) 
{ 
    QMessageBox::critical(this, tr("error::") , qry.lastError().text()); 

} 

db.close(); 

ただし、「クエリを取得できません」というエラーが表示されます。あなたが私を助けてくれたら本当に感謝しています。

更新:問題は、DELETEの後に「*」を配置したことでした。

答えて

1

prepare()を正しく使用していないため、コードにSQL形式の挿入が発生します。これが原因でエラーが発生する理由もあります。 prepare()を正しく使用するには、少なくとも1つのbindValue()が続く必要があります。あなたのケースでのようなもの:

QSqlQuery qry; 
qry.prepare("DELETE * FROM movies WHERE Title = :title"); 
qry.bindValue(":title", value); 
if(!qry.exec()) //... 

bindValue()valueが適切にエスケープされ、任意の害をしないように注意を要します。

... SQLインジェクションに問題がなければ、Bobby Tablesとチャットしてください:)

関連する問題