gpt4 book ai didi

c++ - QtSQL : QSqlRecord doesn't keep the table prefixes

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:32:35 25 4
gpt4 key购买 nike

我正在 Qt 中开发一个小型应用程序,我将 SQL 库与 SQLite 一起用作数据库。到目前为止,效果很好。 QSqlQuery 类只提供了一种通过索引而不是字段名获取列值的方法。但是,使用 record() 函数可以将查询中的当前行转换为 QSqlRecord,它具有 value() 函数通过字段名称获取值。

所以,这工作得很好并且允许我编写更短和更清晰的代码,但是像下面这样的连接查询会带来问题:

SELECT t1.*, t2.* FROM table1 AS t1, table2 AS t2 WHERE t1.table2_id=t2.id

所以我们正常执行这个查询,并将一行转换为一条记录。但事实证明,QSqlRecord 中的列名没有以表名作为前缀 - 例如,在记录对象中可以找到两个名为 id 的列。这显然有点问题。

这个问题的最佳解决方案是什么?

(我在 Qt 错误跟踪器中找到了 this issue,但没有太大帮助。)

最佳答案

字段名完全依赖于驱动;所以问题实际上出在 SQLite 本身,毕竟它可能在做“正确”的事情(正确,就像 SQL 标准一样,我还没有检查过)。

无论如何,简单的解决方案:只需在 SQL 本身中给您的字段一个别名,但是,您不能也不应该使用 select * from:

SELECT t1.id TI_ID, t1.name TI_NAME, t2.id T2_ID FROM table1 AS t1, table2 AS t2 WHERE t1.table2_id=t2.id

关于c++ - QtSQL : QSqlRecord doesn't keep the table prefixes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3365376/

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