[SQL ] VBA利用SQL讀BOM
資料庫名稱: 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://www.ptt.cc/bbs/Database/M.1567880546.A.936.html
※ 編輯: licheer (1.168.43.213 臺灣), 09/08/2019 02:22:41
→
09/08 03:29,
5年前
, 1F
09/08 03:29, 1F
→
09/08 03:30,
5年前
, 2F
09/08 03:30, 2F
推
09/08 08:41,
5年前
, 3F
09/08 08:41, 3F
→
09/14 23:51,
5年前
, 4F
09/14 23:51, 4F
※ 編輯: licheer (36.234.143.56 臺灣), 09/15/2019 19:37:36
Database 近期熱門文章
PTT數位生活區 即時熱門文章