sms*_*are 8 mysql qt odbc qsqltablemodel qsqlquery
我正在使用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
} } }
Run Code Online (Sandbox Code Playgroud)
但是现在我正在使用64位MSVS Qt,我需要使用MySQL ODBC Connector.我已经设置并更改了代码以反映:
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("Driver={MySQL ODBC 8.0 Unicode Driver};DATABASE=MyDatabase;");
Run Code Online (Sandbox Code Playgroud)
这就是我所做的一切.没有WHERE子句的SELECT语句按预期工作,我可以像以前一样通过QSqlTableModel操作数据库.
这只是绑定停止工作......我的意思是绑定值在那里,qDebug返回:
QMap((":pid",QVariant(int,1)))
但是现在查询在exec之后没有返回任何行; 但也没有错误...这也有效:
q.prepare(QString("SELECT id FROM Things WHERE parent_id = '%1'").arg(1))
Run Code Online (Sandbox Code Playgroud)
有帮助吗?
MySQL 5 引入了 SQL 级别的存储过程支持,但没有 API 来控制 IN、OUT 和 INOUT 参数。因此,必须使用 SQL 命令而不是 QSqlQuery::bindValue() 来设置和读取参数。
尽量避免绑定http://doc.qt.io/qt-5/sql-driver.html,使用过程或动态添加参数:
public void mtd(int param)
{
if (q.prepare("SELECT id FROM Things WHERE
parent_id ='"+param+"'")) {
if (q.exec) {
//DO STUFF
}
}}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
253 次 |
| 最近记录: |