ho cercatoSQLQuery uno denominati placeholders diverse volte
QSqlQuery query;
query.prepare("DELETE FROM names WHERE id_col = :ID OR id_parent = :ID");
query.bindValue(":ID", idVal);
query.exec();
supponendo che idVal verrà rilegato due volte, ma che esegue la query solo le righe con id_parent = idVal viene eliminato, con id_col = idVal rimane non eliminata. Quindi solo la seconda volta IDVal è stato associato alla query.
Quando io riscrivo a
QSqlQuery query;
query.prepare("DELETE FROM names WHERE id_col = ? OR id_parent = ?");
query.bindValue(0, idVal);
query.bindValue(1, idVal);
query.exec();
tutto ha funzionato come previsto.
E 'un modo per utilizzare un segnaposto di nome più volte in QSqlQuery?
** Nota a margine: ** Questo non risponde si mette in discussione, ma è possibile 'JOIN' con delete e utilizzare un solo segnaposto. Qualcosa di simile: 'DELETE FROM n nomi n INNER JOIN nomi p ON p.id_col = n.id_parent DOVE id_col =: ID'. –
Per i posteri, ho trovato un trucco per un problema correlato quando si eseguono le istruzioni _select_. Utilizzare il [ 'con clausola di] (https://www.sqlite.org/lang_with.html) in questo modo:' con my_id come (valori (: id)) select * from nomi dove id = (select * from my_id) o parent_id = (seleziona * da my_id) ' –
* timidamente *: questo vincolo viene rimosso in qt 5, quindi i workaround sono necessari solo prima di qt 5. –