gpt4 book ai didi

c++ - QSqlTableModel::insertRecord() 使用非默认连接名称的 QSqlDatabase 失败

转载 作者:行者123 更新时间:2023-11-28 06:15:41 26 4
gpt4 key购买 nike

在我 2014 年末的 MacBook Pro 上使用 Qt 4.8.6clang++ x86_64-apple-darwin14.3.0 我发现 QsqlTableModel::insertRecord() 无法写入目标 MYSQL 数据库:myDB 而构造 QSqlDatbase:myDB 使用非- 默认连接如:

db = QSqlDatabase::addDatabase("QMYSQL","Connection1");

insertRecord(-1,myRecord) 的计算结果为 false

相反,如果我使用通常的默认连接:

db = QSqlDatabase::addDatabase("QMYSQL");

数据库已成功添加为:

mysql> select * from myTable;
+------+------+
| col1 | col2 |
+------+------+
| 1 | 2 |
| 5 | 6 |
+------+------+
2 rows in set (0.00 sec)

容纳多个连接名称的通常建议是使用 QSqlDatabase 构造 QSqlQuery 如下:

QSqlQuery query(db)

在这种情况下,这显然没有帮助。你能指出遗漏了什么吗?

下面是一小部分可运行的代码,说明了上面的内容:

testdb.h

#ifndef TESTDB_H
#define TESTDB_H

#include <QtSql>
#include <QtCore>


class TestDB
{
public:
TestDB();
~TestDB();
void dbInit();
void appendDB(const int &col1, const int &col2);
private:
QSqlDatabase db;
QSqlTableModel *model;
};

#endif // TESTDB_H

testdb.cpp

#include "testdb.h"

TestDB::TestDB()
{
dbInit();
}

TestDB::~TestDB()
{

}

void TestDB::dbInit()
{
// database connection
db = QSqlDatabase::addDatabase("QMYSQL","Connection1");
db.setDatabaseName("myDB");
db.setUserName("root");
db.setPassword("");
db.setHostName("localhost");
db.setConnectOptions();
if (!db.open())
{
qDebug() << "Database error occurred in class: stockinfo" << db.lastError().text();
}
QSqlQuery query(db);

// create database named transactions
query.exec("CREATE DATABASE IF NOT EXISTS myDB;");
query.exec("USE myDB;");
query.exec("CREATE TABLE IF NOT EXISTS myTable("
"col1 INT,"
"col2 INT"
");");
model = new QSqlTableModel;
model->setTable("myTable");
model->select();
}

void TestDB::appendDB(const int &col1, const int &col2)
{
QSqlRecord myRecord;
myRecord.append(QSqlField("col1", QVariant::Int));
myRecord.append(QSqlField("col2", QVariant::Int));

myRecord.setValue("col1",col1);
myRecord.setValue("col2",col2);

model->insertRecord(-1,myRecord);
qDebug() << "model->insertRecord(-1,myRecord) = " << model->insertRecord(-1,myRecord);
qDebug() << "Last Database error: " << db.lastError().text();
}

main.cpp

#include <QCoreApplication>
#include <testdb.h>

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
TestDB myTestDB;
myTestDB.appendDB(1,2);
myTestDB.appendDB(5,6);
return a.exec();
}

dbTest.pro

QT       += core sql

QT -= gui

TARGET = dbTest
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app


SOURCES += main.cpp \
testdb.cpp

HEADERS += \
testdb.h

最佳答案

当您创建QSqlTableModel (testdb.cpp:35) 时,您没有指定任何数据库连接,因此您的模型包含默认连接。这可能不是您想要的,未经测试。参见 documentation

关于c++ - QSqlTableModel::insertRecord() 使用非默认连接名称的 QSqlDatabase 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30378883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com