QxOrm对于SQl Server的操作中表名解析不对

在Qt中使用QxOrm对SQL Server数据进行连接,首先创建数据库S,然后在数据库中创建表User,然后在ODBC中设置改数据库S命名数据源为Sorm。
问题:SQL Server语法中,对表进行操作时表名需要写[S].[dbo].[User],这里表名就会出问题。

qxorm连接配置:

qx::QxSqlDatabase::getSingleton()->setDriverName("QODBC");
qx::QxSqlDatabase::getSingleton()->setDatabaseName("Sorm");
qx::QxSqlDatabase::getSingleton()->setHostName("localhost");
qx::QxSqlDatabase::getSingleton()->setUserName("sa");
qx::QxSqlDatabase::getSingleton()->setPassword("123456");
qx::QxSqlDatabase::getSingleton()->setFormatSqlQueryBeforeLogging(true);
qx::QxSqlDatabase::getSingleton()->setDisplayTimerDetails(true);
qx::QxSqlDatabase::getSingleton()->setVerifyOffsetRelation(true);

而在Qt中配置好QxOrm后,对表进行查询,其部分代码如下:

QSqlError daoError = qx::dao::create_table<User>();
List_user list_user;

// ********************  这里使用的表名就是   [S].[dbo].[User]   ********************
qx_query storedProc("select * from [S].[dbo].[User]");

daoError = qx::dao::execute_query(storedProc, list_user);
List_user::iterator it = list_user.begin();
qDebug() << "------------------------------------";
while(it != list_user.end()){
    qDebug() << "ID:" << it.i->t().second->ID;
    qDebug() << "UserName:" << it.i->t().second->UserName;
    qDebug() << "PassWord:" << it.i->t().second->PassWord;
}
qDebug() << "------------------------------------";

然后结果如下图所示:

img


可以发现能够显示出结果,说明正常连接了。
而当执行插入操作时,其代码如下:

//user入库
QSqlDatabase db = qx::QxSqlDatabase::getDatabase();
bool bCommit = db.transaction();

// 插入语句
daoError = qx::dao::insert(user, &db);

bCommit = (bCommit && !daoError.isValid());
qAssert(bCommit);
db.commit();

就会出现如下错误:

img


如图红框所示,预定义语句中的表名是只有User,查找网上资料,上面这段代码的插入语句进行修改:

// 插入语句修改,手动添加一个表名的参数说明
 qx::dao::insert(user, &db, "[S].[dbo].[User]");

再次执行仍然是有同样的问题,请问对于SQL Server这个表名如何处理?

【以下回答由 GPT 生成】

问题描述中提到,在Qt中使用QxOrm进行SQL Server连接时,遇到了表名解析不正确的问题。具体来说,当查询表时,需要将表名写为[S].[dbo].[User],但执行插入操作时,需要修改插入语句并手动添加一个表名的参数说明。

解决这个问题的方法是修改插入语句并手动添加表名参数说明。具体的步骤如下:

首先,修改插入语句,将插入的表名参数添加到qx::dao::insert函数中。例如,将原来的插入语句:

qx::dao::insert(user, &db);

修改为:

qx::dao::insert(user, &db, "[S].[dbo].[User]");

这样就可以手动指定表名参数,解决了插入操作时遇到的表名解析不正确的问题。

以下为修改后的插入操作代码示例:

User user;
// 设置user对象的属性值
// ...

// 执行插入操作,并手动添加表名参数说明
qx::dao::insert(user, &db, "[S].[dbo].[User]");

这样就能正常执行插入操作了。

如果以上解决方法无效,可能是QxOrm库本身存在bug或者不完全支持SQL Server的表名格式。在这种情况下,可以考虑联系QxOrm的开发者或者技术支持团队,向他们反馈这个问题,并寻求他们的帮助和解决方案。

希望能解决你的问题!如果还有其他疑问,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^