我正在将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;");
这就是我所做的。没有WHERE子句的SELECT语句按预期工作,我可以像以前一样通过QSqlTableModel操作数据库。
只是绑定停止工作...我的意思是绑定值在那里,qDebug返回:
QMap((“:pid”,QVariant(int,1)))
但是现在查询在exec之后不返回任何行;但也没有错误...这也可以:
q.prepare(QString("SELECT id FROM Things WHERE parent_id = '%1'").arg(1))
有帮助吗?
答案 0 :(得分:0)
对我来说,始终在<ion-list>
**<ng-container *ngFor="let image of observable | async">**
<ion-item *ngIf="image.deletedAt === undefined">
<span class="item-container" (click)="showImage(image)">
<ion-thumbnail item-start>
<img id="{{image.url}}" src="{{getUrl(image) + image.url}}">
</ion-thumbnail>
<span>
<p>created at: {{image.createdAt | date: 'd/M/yy H:m'}}</p>
<p>created by: {{image.createdBy}}</p>
</span>
</span>
<button ion-button item-end (click)="removeImage(image)">
<ion-icon name="trash"></ion-icon>
</button>
</ion-item>
</ng-container>
</ion-list>
中使用未命名的参数。
例如:
QSqlQuery
经过MySql(Linux),ODBC(mingw),QSqlite的测试。
答案 1 :(得分:0)
我上次遇到类似的问题,即准备好的查询无法正常工作,这是因为数据库驱动程序过旧。
基本上,一些第三方程序在我的PATH中放置了一个旧的mysql.dll
。当我的Qt应用程序运行时,将加载旧的DLL,而不是较新的DLL。新旧版本之间的差异足以使Qt无法准备查询。
因此,我建议您检查软件是否正在加载与数据库相关的DLL的正确版本。
也不是所有的Qt驱动程序都支持准备好的查询,因此您应该检查QSqlDriver::hasFeature(QSqlDriver::PreparedQueries)
是否对所使用的驱动程序返回true。
请注意,在我的情况下,QSqlDriver::hasFeature(QSqlDriver::PreparedQueries)
确实返回true,因为DLL的预期版本应该支持准备好的查询。
答案 2 :(得分:0)
MySQL 5引入了SQL级别的存储过程支持,但没有用于控制IN,OUT和INOUT参数的API。因此,必须使用SQL命令而不是QSqlQuery :: bindValue()来设置和读取参数。
尝试避免绑定https://httpd.apache.org/docs/2.4/programs/rotatelogs.html,使用过程或动态添加参数:
Point p{3.14, 42.0};