3

非常に単純な MySQL テーブルがあり、QSqlQuery を使用していくつかの行を選択したいと考えています。

ローカルの開発 mysql サーバー (Windows; 64 ビット) に接続しています。

mysql ワークベンチなどの他のツールで 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