非常に単純な 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
、回答またはコメントを書いてください。