Я использовал драйвер Qt MySQL с 32-битным MinGW Qt. Это работало:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("MyDatabase");
//SETUP
if (db.open) {
QSqlQuery q;
if (q.prepare("SELECT id FROM Things WHERE parent_id = :pid")) {
q.bindValue(":pid", 1);
qDebug() << boundValues();
if (q.exec) {
//DO STUFF
} } }
Но теперь, когда я использую 64-битный MSVS Qt, мне нужно использовать MySQL ODBC Connector. Я настроил его и изменил код, чтобы отразить это:
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("Driver={MySQL ODBC 8.0 Unicode Driver};DATABASE=MyDatabase;");
Это все, что я сделал. Операторы SELECT без предложения WHERE работают должным образом, и я могу манипулировать базой данных через QSqlTableModel, как и раньше.
Просто привязка перестала работать... Я имею в виду, что связанное значение есть, и qDebug возвращает это:
QMap((":pid", QVariant(int, 1)))
но теперь запрос не возвращает строк после exec; но тоже без ошибок... это тоже работает:
q.prepare(QString("SELECT id FROM Things WHERE parent_id = '%1'").arg(1))
Любая помощь?
QODBC
, но читали ли вы doc.qt. io/qt-5/sql-driver.html#qodbc? - person TrebledJ   schedule 22.11.2018QMap((":vid", QVariant(int, 1)))
читается как:vip
вместо:pid
, как в первом фрагменте кода... это правильно? - person cbuchart   schedule 26.11.2018QODBC3
вместоQODBC
? Или вы можете попробовать это:q.bindValue(":pid", QVariant(1));
- person someoneinthebox   schedule 26.11.2018