Sheya·晓玥 2023-09-04 13:54 采纳率: 33.3%
浏览 3

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这个表名如何处理?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-04 16:03
    关注

    【以下回答由 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的开发者或者技术支持团队,向他们反馈这个问题,并寻求他们的帮助和解决方案。

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


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

报告相同问题?

问题事件

  • 修改了问题 9月4日
  • 创建了问题 9月4日

悬赏问题

  • ¥30 arduino vector defined in discarded section `.text' of wiring.c.o (symbol from plugin)
  • ¥20 关于#c++#的问题:(2)运算二叉树·表达式一般由一个运算符和两个操作数组成:(相关搜索:二叉树遍历)
  • ¥20 如何训练大模型在复杂因素组成的系统中求得最优解
  • ¥15 关于#r语言#的问题:在进行倾向性评分匹配时,使用“match it"包提示”错误于eval(family$initialize): y值必需满足0 <= y <= 1“请问在进行PSM时
  • ¥45 求17位带符号原码乘法器verilog代码
  • ¥20 PySide6扩展QLable实现Word一样的图片裁剪框
  • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
  • ¥15 怎么看我在bios每次修改的日志
  • ¥15 python+mysql图书管理系统
  • ¥15 Questasim Error: (vcom-13)