Qt数据库(sqlite)编程

大湾区小明 2010-09-02 10:13:39
请教!sqlite 数据库表最多只能到900列吗?有没有什么好的方法突破这个限制?行数方面好像没有任何限制。

具体情况是这样的,我有2个表,表A中每增加一行,另外一个表B则增加一列。我们需要在表A中增加上千行的数据,所以表B需要存储上千列。但是sqlite不支持那么多列,所以我想行列互换,即表A增加一行,表B也增加一行,能实现吗? 好像SQL语句create table 创建的都是带列名的表啊!

具体背景:西门子的WinCC flexible 2008软件。创建新项目后,双击添加配方,新建配方_1,然后右边的元素页面每增加加一行成分,则数据记录页面中就增加一列。所以当某种配方有上千种成分时,数据记录页面就有上千列了。单纯的这样直接创建表,sqlite最多支持900来列,不够用。所以我打算改变存储方式,就是元素页面每添加一行成分,数据记录页面也是增加一行,即数据记录页面的列(字段)换为行。这样处理可行吗?如果不这样处理的话,是否有朋友知道还有什么其他方法没有?

希望不吝赐教,非常感谢!
...全文
2107 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
大湾区小明 2010-09-08
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 killua_hzl 的回复:]
有想到两个思路:
1)第一个就是数据库的本质是用来存储数据信息的,要是900列不够用的话,可以考虑一个列存储多个列的信息,不过这样效率肯定会有一定的下降就是了,当然你也可以考虑使用多个表。我认为后者更好

2)换数据库吧
[/Quote]

为什么把列作为行来操作就不行呢?直接使用qt编程操作sql语言。
  • 打赏
  • 举报
回复
有想到两个思路:
1)第一个就是数据库的本质是用来存储数据信息的,要是900列不够用的话,可以考虑一个列存储多个列的信息,不过这样效率肯定会有一定的下降就是了,当然你也可以考虑使用多个表。我认为后者更好

2)换数据库吧
大湾区小明 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 bbgg 的回复:]
你说的Qt实际上就是指sqllite吗?
[/Quote]
sqlite是一个数据库,Qt是一个应用程序开发框架,不一样。
bbgg 2010-09-06
  • 打赏
  • 举报
回复
你说的Qt实际上就是指sqllite吗?
大湾区小明 2010-09-03
  • 打赏
  • 举报
回复
谢楼上所有的朋友,今天和主管讨论了,还是我最初的想法,即表A增加一行,表B也增加一行。试试使用qt编程直接底层操作sql语句。我先试试,暂不结贴,希望继续和大家一起讨论,非常感谢!
大湾区小明 2010-09-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wwwwa 的回复:]
增:上述已经讲过了
减:,将B表相应字段的值UPDATE 为0,并删除对照表中的相关记录
[/Quote]
真不好意思,我数据库很差劲,可以理解为没学过。
是不是先创建一个空表b,crate table b();
然后插入1、2、3行分别为名称、显示名称、编号。
最后A表每增加一行成分,B表就向下也增加一行??那个对照表怎么建立?作什么用?谢谢!!!
WWWWA 2010-09-02
  • 打赏
  • 举报
回复
增:上述已经讲过了
减:,将B表相应字段的值UPDATE 为0,并删除对照表中的相关记录
大湾区小明 2010-09-02
  • 打赏
  • 举报
回复
to wwwwb,这样可以吗?A表中的成分行可以随时增减,即B表的成分列也是随时变化的,
select f1 as 成分_1,f2 as 成分_2,f3 as 成分_3 from b
关键是不知道B表中有多少列成分,不是固定的。
wwwwb 2010-09-02
  • 打赏
  • 举报
回复
B表名称、显示名称固定,其余为F1-F999
对照表
f1 成分_1
f2 成分_2
f3 成分_3

sql:
select f1 as 成分_1,f2 as 成分_2,f3 as 成分_3 from b
SQL语句通过对照表生成
大湾区小明 2010-09-02
  • 打赏
  • 举报
回复
越来越鄙视百度了,CSDN空间相册里复制过来的地址,应该可以看到了吧
A:

B:
wwwwb 2010-09-02
  • 打赏
  • 举报
回复
看不到 图片
大湾区小明 2010-09-02
  • 打赏
  • 举报
回复
图片如下:A表

B表
wwwwb 2010-09-02
  • 打赏
  • 举报
回复
为什么不行?
预先建立好B表,查询时,通过对照表生成SQL语句,
增加A表一行时,更新对照表,再UPDATE B表的相应列为A表记录
大湾区小明 2010-09-02
  • 打赏
  • 举报
回复
to 4楼:预先建立好不行的,因为B表完全受A表的控制,A表增加了一行成分,B表才增加一列成分。
如图:A表(成分表)

B表(数据记录表)
wwwwb 2010-09-02
  • 打赏
  • 举报
回复
可以将B表的字段预先建立好,
如F1-F999
,再建立 一个对照表 ,比如
F1 BH
F2 XM,取出时用字符串生成SQL语句,再动态执行SQL语句
大湾区小明 2010-09-02
  • 打赏
  • 举报
回复
谢楼上,就是用sqlite开发。Qt中有种model/view结构,分底层存储和上层显示。
底层存储是表A增加一行,表B也增加一行,但是上层显示时表B要经过行列变换,即在用户看来,表A增加了一行,表B是增加一列。
关键就是表B,目前是表A增加一行,表B就增加一列,但底层存储我想对表B行列互换,这样表A增加一行,表B也是增加一行,等显示的时候再用代理模型进行行列转换,显示上就转换回来了(表A增加一行,表B增加一列)。
不知道这个底层存储对表B进行行列互换应该怎么编程?SQL语句create table 创建的都是带列名的表,可不可以创建一个空表,然后将那些列作为行插入到表中呢?列名可以改为行名吗?
ACMAIN_CHM 2010-09-02
  • 打赏
  • 举报
回复
没有办法,除非你去改它的源代码。

不只是SQLITE,每种数据库都会有它的限制,目前的数据库无法去支持表中无限量的列。
另外从数据库设计角度来看,也很少会出现需要上千列的表,上千列中估计每个记录实际用到的列仅仅几列而已,其余的都被浪费了。
建议重新考虑一下你的数据库设计,或许可以进行优化。
wwwwb 2010-09-02
  • 打赏
  • 举报
回复
这么 多列,不如用SQLSERVER2005的开发版了,

即表A增加一行,表B也增加一行
可用TRIGGER实现
tingsking18 2010-09-02
  • 打赏
  • 举报
回复
重新设计下数据库吧
大湾区小明 2010-09-02
  • 打赏
  • 举报
回复
唉,怎么处理好呢?
加载更多回复(10)

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧