看板 Database 關於我們 聯絡資訊
資料庫名稱: 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
konkonchou: 1.建議寫成stored procedure丟參數呼叫 09/08 03:29
konkonchou: 2.檢查connection是否沒open 09/08 03:30
cutekid: 推 k 大說的: 將複雜邏輯寫成 SP 去呼叫 09/08 08:41
licheer: 搞定了,謝謝 09/14 23:51
※ 編輯: licheer (36.234.143.56 臺灣), 09/15/2019 19:37:36
waiter337: 2483818.html 02/26 14:16