作者licheer (Keep The Faith)
看板Database
标题[SQL ] VBA利用SQL读BOM
时间Sun Sep 8 02:22:24 2019
资料库名称: MSSQL
下面这段code在MSSQL Studio中是可以执行,也可以查到结果
但是搬到VBA里面(将下面的SQL语句,全部放在同一个string中)
就会出现 "当物件关闭时,不允许操作" 的错误
请问这是哪里错了呢?
======
declare @maincode char(60)
set @maincode='12345-77889965'--
declare @i int
set @i=0
--定义主件品号临时表
declare @tmp_main table (品号 CHAR(60))
--将待查品号存入主件品号临时表
INSERT INTO @tmp_main SELECT MD003 FROM BOMMD WHERE MD001=@maincode
--定义BOM明细临时表
declare @tmp_bom table (主件品号 char(60),元件品号 char(60),组成用量 float,
阶数 int)
--将待查品号下一级元件品号数据存入BOM明细临时表
insert into @tmp_bom select MD001,MD003,MD006,@i from BOMMD
where MD001 =@maincode
--如果BOMM表MD001(主件品号)存在於BOM明细临时表中的元件品号且阶数为当前最低
层,进入回圈
while exists(select * from BOMMD where MD001 in (select 元件品号 from
@tmp_bom where 阶数=@i))
begin
--向BOM明细临时表插入BOMMD中MD001与主件品号临时表品号一致的资料(以主件品号
临时表左关联BOMMD,存在多对一关系)
insert into @tmp_bom select MD001,MD003,MD006,@i+1 from
(select MD001,MD003,MD006 from @tmp_main LEFT join BOMMD on 品号
=MD001)A where MD001 is not null
--清空主件品号临时表
delete from @tmp_main
--向主件品号临时表插入BOMMD中的主品号存在於BOM明细临时表元件品号的MD003(子
品号)
INSERT INTO @tmp_main SELECT MD003 FROM BOMMD WHERE MD001
in (select 元件品号 from @tmp_bom where 阶数=@i)
set @i=@i+1
end
select * from @tmp_bom ORDER BY 阶数,元件品号
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.168.43.213 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1567880546.A.936.html
※ 编辑: licheer (1.168.43.213 台湾), 09/08/2019 02:22:41
1F:→ konkonchou: 1.建议写成stored procedure丢参数呼叫 09/08 03:29
2F:→ konkonchou: 2.检查connection是否没open 09/08 03:30
3F:推 cutekid: 推 k 大说的: 将复杂逻辑写成 SP 去呼叫 09/08 08:41
4F:→ licheer: 搞定了,谢谢 09/14 23:51
※ 编辑: licheer (36.234.143.56 台湾), 09/15/2019 19:37:36
6F:→ waiter337: 2483818.html 02/26 14:16