3

我有一个非常简单的 MySQL 表,想使用 QSqlQuery 选择一些行。

我已连接到我的本地开发 mysql 服务器(Windows;64 位)。

当我使用 mysql workbench 等其他工具运行 SELECT 查询时,我总是得到正确的结果(当然!)。

对 QSqlQuery 做同样的事情根本不会给我任何行!

QString sql = "SELECT `ID`, `Name`, `ModbusID`, `DeviceType` FROM `Devices`;";

qDebug() << sql;

QSqlQuery query(m_db);
if(!query.prepare(sql))
{
    qFatal("could not prepare query");
    return;
}
if(!query.exec())
{
    qFatal("could not execute query");
    return;
}

while(query.next())
    qDebug() << "result";

qDebug() << "finished.";

SQL 表定义

CREATE TABLE IF NOT EXISTS `Devices` (
    `ID` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `MeasurementID` INT UNSIGNED NOT NULL,
    `Name` VARCHAR(255) NOT NULL,
    `ModbusID` TINYINT UNSIGNED NOT NULL,
    `DeviceType` INT NOT NULL,
    `TimestampCreated` DATETIME NOT NULL,
    `TimestampLastModified` DATETIME,
    FOREIGN KEY(`MeasurementID`) REFERENCES `Measurements`(`ID`) ON DELETE CASCADE,
    UNIQUE (`MeasurementID`, `Name`)
);

在此处输入图像描述

在这两个程序中,我都连接到同一个本地 mysql 实例。我的机器上或网络上没有其他 mysql 服务器。这发生在 Oracle 的 MySQL 和 MariaDB 上!所以问题一定出在我的程序中。

我做错了什么还是这里发生了什么?

更新经过多次测试,问题仅在我选择ModbusID. 我将表定义从

    `ModbusID` TINYINT UNSIGNED NOT NULL,

    `ModbusID` INT UNSIGNED NOT NULL,

现在它可以工作了。看起来像QT 中的错误。但我不认为这是一个好的解决方案。如果您知道使用方法,TINYINT请写下答案或评论!

4

0 回答 0