[SQL ] VBA利用SQL讀BOM

看板Database (資料庫)作者 (Keep The Faith)時間5年前 (2019/09/08 02:22), 5年前編輯推噓1(103)
留言4則, 3人參與, 5年前最新討論串1/1
資料庫名稱: 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
1.建議寫成stored procedure丟參數呼叫
09/08 03:29, 1F

09/08 03:30, 5年前 , 2F
2.檢查connection是否沒open
09/08 03:30, 2F

09/08 08:41, 5年前 , 3F
推 k 大說的: 將複雜邏輯寫成 SP 去呼叫
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
文章代碼(AID): #1TS_LYas (Database)
文章代碼(AID): #1TS_LYas (Database)