Qt 5.4.1 (MinGW 32-bit) 在 Windows x64 上打開 32 位 `test.db` 成功(`db.open()` 返回 `true`),但 `INSERT`、`SELECT` 全返回 `false`,無報錯資訊。
WoW64 子系統保證 32 位進程對 32 位 DLL(含 `sqlite3.dll`)的載入與執行零差異,**不是架構不匹配導致**。
db.setDatabaseName("test.db"); // 相對路徑 → 工作目錄不一定是 exe 所在目錄
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
QString dbPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
QDir().mkpath(dbPath);
db.setDatabaseName(dbPath + "/test.db");
if (!db.open()) {
qCritical() << "Open failed:" << db.lastError().text();
return -1;
}
QSqlQuery query(db);
if (!query.exec("CREATE TABLE IF NOT EXISTS user (name TEXT, action TEXT)")) {
qCritical() << "Create table failed:" << query.lastError().text();
}
bool ok = query.exec("INSERT INTO user VALUES('xiaomei','actaction')");
qDebug() << "Insert:" << ok << query.lastError().text();
query.exec("SELECT name FROM user");
while (query.next()) {
qDebug() << "User:" << query.value(0).toString();
}
「能開不能寫」99% 是**權限**或**路徑**問題。善用 `QStandardPaths` 取得可寫目錄,並在 `open()` 後必檢 `lastError()`,即可快速定位。