Access 與 Flexsim 4.0 整合應用

摘要:Access 與 Flexsim 4.0 整合應用

程式構思 :
           Flexsim 是一款模擬軟體,它的應用層面很廣,舉凡各行各業想要評估專案的可行性,預先想借由計算機的運算能力來做事前的模擬評估等,都可借由此類的軟體應用獲得極佳的決策支援。
模擬概述 :
    首先,模擬3種不同的產品並以均勻分配隨機產生經由兩名工人負責搬運至三部機器進行打包作業。然後再經過三條輸送帶,再搭上一部堆高機送至倉儲料架上。模擬時間 5000 秒以上,分析出瓶頸(bottleneck)單元落在何處。最後再擷取產生的統計報表資料,回寫到 Access 檔案中,透過 VBA 程式編排,整合出一張”系統模擬購置表”。它會找尋系統模擬中所有的物件,均idle少於3 (sec) 的物件(相對表示該物件是busy 狀態),並給予簡單的採購建議。

運作畫面如下 :

Flexsim 4.0 的作業畫面 


 

 

ACCESS 的 VBA 執行畫面如下 :

 

Step 1 : 輸入瀏覽檔案路徑。

 

 

Step 2 : 自動產生”系統模擬購置表”。

 

 

Step 3 : 自動填入所有欄位

 

程式碼 :

Option Compare Database

Sub Main()
'*********************************************************
'擷取 StateReport 的Data ,並判斷機器,設備 ,人員的需求 ,自
'動產生表單. 依 [idle] 欄位判斷 :
'1.Operator 和 Transporter 的 [idle] < 3% 代表 busy.進
'  而產生 [系統模擬購置表].
'*********************************************************
Dim db As Database
Set db = CurrentDb
'判斷"系統模擬購置表"是否存在.
  If SearchTable("系統模擬購置表") Then
    '新增一筆資料.
    InsertData
   Else
    NewTable
    InsertData
   End If
 UserMessage
End Sub
Sub NewTable()
'新增Table.
Dim db As Database
Set db = CurrentDb
Dim tdfNew As TableDef
 Set tdfNew = db.CreateTableDef("系統模擬購置表")
 
 With tdfNew
   .Fields.Append .CreateField("序號", dbInteger)
   .Fields.Append .CreateField("模擬人員", dbText)
   .Fields.Append .CreateField("模擬日期", dbText)
   .Fields.Append .CreateField("模擬時數", dbText)
   .Fields.Append .CreateField("條件設定", dbText)
   .Fields.Append .CreateField("購置項目", dbText)
   .Fields.Append .CreateField("補充說明", dbText)
 End With
 db.TableDefs.Append tdfNew
 UserMessage
End Sub
Sub transData()
 '轉換FlexSim 的 Class 欄位資料.
 Dim db As Database
 Dim wrkJet As Workspace
 Set wrkJet = CreateWorkspace("JetWorkspace", "admin", "")
 Set db = wrkJet.OpenDatabase("Northwind.mdb")
 
End Sub
Sub InsertData()
  '填入[系統模擬購置表]之預設值.
  Dim rs As ADODB.Recordset
  Set rs = New ADODB.Recordset
  rs.Open "select * from 系統模擬購置表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  rs.AddNew
   rs!購置項目 = "dsafdsf"
   rs.Update
  'rs("模擬人員") = "JACK"
 rs.Close
End Sub
Function SearchTable(TableName As String) As Boolean
'搜尋Table.
    SearchTable = False
    Dim tbl As DAO.TableDef
    For Each tbl In CurrentDb.TableDefs
        If tbl.Name = TableName Then
            SearchTable = True
            Exit For
        End If
    Next
End Function
Sub GetStateReport()
'擷取 StateReport 的 Data.
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "select Object,Class,idle from StateReport where idle<=5", CurrentProject.AccessConnection, adOpenKeyset, adLockOptimistic
rs.Close
End Sub
Sub UserMessage()
 '訊息視窗.
  MsgBox ("程式執行完畢!")
End Sub

凡事,總有更輕鬆的解決方法。