求救啊,彻底被VC的ADO数据库操作给打败了

zpc38368330 2013-04-14 12:47:56
我用的VC教程里给的ADO数据库操作的方法,用的是MSADO15.DLL,和MSADOX.DLL两个动态库.操作的数据库是ACCESS的MDB文件
现在碰到了这么个蛋痛的问题:
我创建了几个视图,这几个视图设为V1,V2,...,Vn(n没有上限的,根据情况而定,不一定会创建几个)
这几个视图里的字段设为(零件,零件数量,备注)
然后,我想把这几个视图里字段 零件 相同的,汇总一下,并把备注的文本,连接起来
我想的方法如下: PS:这是大神skywoodsky教的
1.创建许多也可以下标递增的视图,VS1,VS2,...,VSn;
然后VS1=v1 , VS2=VS1+V2 , VSn=VSn-1 + Vn ,....
在VS2=VS1+V2组合的时间,有可能VS1中有的零件,V2中没有,反之V2中有的VS1中也可能没有,所以用了联合查询
CREATE VIEW VS2 AS
SELECT 零件,A.零件数量+B.零件数量 AS 零件数量 ,a.备注+','+b.备注
FROM VS1 A,V2 B WHERE A.零件=B.零件
UNION
SELECT .... FROM ... WHERE A.零件<>B.零件
UNION .....
(上面的语句是用的CString::FORMAT自动生成的VS2,VS1和V2,这里只是个假设,方便看)
然后我发现,特妹的ADO的JET SQL居然不支持视图里的联合查询,没办法我又百度了下,参考高手们的指点想了个办法2
2.直接创建临时的表TABLE,不用视图,大约伪码如下
(1).SELECT INTO T1 FROM V1
(2).UPDATE T1 SET 零件数量=T1.零件数量+DSUM("零件数量","V2","零件="'&T1.零件&"'"
(3).INSERT 剩下那些不相等的
第(2)步不能改为子查询,因为JET也不支持UPDATE的子查询,我搞了半天才明白过来...
第2个办法也出了问题,虽然SQL语句在程序执行过程中没抛出异常,但是零件数量全为空,练个零都没有...
好像是这个DSUM前面不能有运算符吧,这不蛋痛吗~~
我的本想这样做最后的汇总
已有视图V1,V2,..,Vn
然后创建临时的表或视图 设名为VT1,VT2,VT3..,VTn;
VT1=V1; VT2=VT1+V2; VT3=VT2+V3 ;...; VTn=VTn-1+Vn;
可是我发现貌似JET里真没这中能最后汇总起来的方式,视图没有联合查询,用表就要用UPDATE,如果不用UPDATE,也是有更麻烦的方法,不过感觉SQL语句写到那份上,是不是也太2了,而且如果这是一个大数据库,最后的执行会卡死人的.

我想问下,有没有什么好的方法,可以执行方法1和2里的语句,比如再加个什么组件或库之类的,最好可以做成绿色的软件,因为我会在单位好几台电脑上用这个软件,每个电脑都打补丁会很郁闷的,因为有些机器装了还原卡...

或者各位还有什么别的可执行的语句来完成这个数据库的汇总.

先谢谢各位大神了.坐等神自天而降~~
...全文
402 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
幸福的程序猿 2013-05-18
  • 打赏
  • 举报
回复
引用 楼主 zpc38368330 的回复:
我用的VC教程里给的ADO数据库操作的方法,用的是MSADO15.DLL,和MSADOX.DLL两个动态库.操作的数据库是ACCESS的MDB文件 现在碰到了这么个蛋痛的问题: 我创建了几个视图,这几个视图设为V1,V2,...,Vn(n没有上限的,根据情况而定,不一定会创建几个) 这几个视图里的字段设为(零件,零件数量,备注) 然后,我想把这几个视图里字段 零件 相同的,汇总一下,并把备注的文本,连接起来 我想的方法如下: PS:这是大神skywoodsky教的 1.创建许多也可以下标递增的视图,VS1,VS2,...,VSn; 然后VS1=v1 , VS2=VS1+V2 , VSn=VSn-1 + Vn ,.... 在VS2=VS1+V2组合的时间,有可能VS1中有的零件,V2中没有,反之V2中有的VS1中也可能没有,所以用了联合查询 CREATE VIEW VS2 AS SELECT 零件,A.零件数量+B.零件数量 AS 零件数量 ,a.备注+','+b.备注 FROM VS1 A,V2 B WHERE A.零件=B.零件 UNION SELECT .... FROM ... WHERE A.零件<>B.零件 UNION ..... (上面的语句是用的CString::FORMAT自动生成的VS2,VS1和V2,这里只是个假设,方便看) 然后我发现,特妹的ADO的JET SQL居然不支持视图里的联合查询,没办法我又百度了下,参考高手们的指点想了个办法2 2.直接创建临时的表TABLE,不用视图,大约伪码如下 (1).SELECT INTO T1 FROM V1 (2).UPDATE T1 SET 零件数量=T1.零件数量+DSUM("零件数量","V2","零件="'&T1.零件&"'" (3).INSERT 剩下那些不相等的 第(2)步不能改为子查询,因为JET也不支持UPDATE的子查询,我搞了半天才明白过来... 第2个办法也出了问题,虽然SQL语句在程序执行过程中没抛出异常,但是零件数量全为空,练个零都没有... 好像是这个DSUM前面不能有运算符吧,这不蛋痛吗~~ 我的本想这样做最后的汇总 已有视图V1,V2,..,Vn 然后创建临时的表或视图 设名为VT1,VT2,VT3..,VTn; VT1=V1; VT2=VT1+V2; VT3=VT2+V3 ;...; VTn=VTn-1+Vn; 可是我发现貌似JET里真没这中能最后汇总起来的方式,视图没有联合查询,用表就要用UPDATE,如果不用UPDATE,也是有更麻烦的方法,不过感觉SQL语句写到那份上,是不是也太2了,而且如果这是一个大数据库,最后的执行会卡死人的. 我想问下,有没有什么好的方法,可以执行方法1和2里的语句,比如再加个什么组件或库之类的,最好可以做成绿色的软件,因为我会在单位好几台电脑上用这个软件,每个电脑都打补丁会很郁闷的,因为有些机器装了还原卡... 或者各位还有什么别的可执行的语句来完成这个数据库的汇总. 先谢谢各位大神了.坐等神自天而降~~
直接用MYSQL api不好吗
牧童吃五谷 2013-05-04
  • 打赏
  • 举报
回复
http://www.pudn.com/downloads103/sourcecode/database/detail423885.html 所下载的类非常简单的,一揽子解决VC++访问数据库的问题
LiuYinChina 2013-04-15
  • 打赏
  • 举报
回复
SQLite
zyq5945 2013-04-14
  • 打赏
  • 举报
回复
把几个视图的数据都放到一个“零件,零件数量,备注”表中, 零件数量总数量可以这样查询
SELECT SUM(零件数量) FROM Tbl_YourTable WHERE 零件 = ...
备注的话查询对应零件的所有备注,然后得到一个数组,把这个数组累加就是你要的结果了。
zyq5945 2013-04-14
  • 打赏
  • 举报
回复
WHERE 零件 =的话就是只查一种型号零件的,GROUP BY分钟的话就是所有零件的。 下面的SQL是查一种型号零件的所有备注,解析后得到数组再拼接下就是你要的字符串了。
SELECT 备注 FROM Tbl_YourTable WHERE 零件 = ...
zpc38368330 2013-04-14
  • 打赏
  • 举报
回复
引用 1 楼 zyq5945 的回复:
把几个视图的数据都放到一个“零件,零件数量,备注”表中, 零件数量总数量可以这样查询 SQL code?1SELECT SUM(零件数量) FROM Tbl_YourTable WHERE 零件 = ... 备注的话查询对应零件的所有备注,然后得到一个数组,把这个数组累加就是你要的结果了。
额,版主来了,先谢谢了 这个方法不错,可是备份字符串的连接该怎么做? 这个方法是不是该这么写 SELECT 零件,SUM(零件数量) FROM tb1_yourtable group by 零件 不能用WHERE吧,用WHERE 可以替代GROUP BY吗?我不在自己的电脑旁边没法测试下

4,011

社区成员

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

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