iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 16
0
自我挑戰組

Access VBA的眉眉角角系列 第 16

Access VBA 的眉眉角角Day16: 匯入外部資料庫以AS/400為例

  • 分享至 

  • xImage
  •  

筆者在接觸Access之前,只有學過部份SQL語法,資料庫軟體為SQLite與SQL Server Express,後來開始工作後,由於公司是用IBM AS/400伺服器,所以又接觸到了部份DB/2的語法,以及加強了資料庫的概念,後來又接觸到了Access,才知道,原來ODBC串連後,能做的事情還真多!

拉哩拉雜的講了一堆,今天其實是要分享匯入外部資料庫的方法,Access中,於資料表空白處,按下滑鼠左鍵,即可看到「匯入」功能:

http://ithelp.ithome.com.tw/upload/images/20161213/20007221ppQBzixHoM.png

由這裡,我們可以匯入AS/400的資料檔到Access中使用。為何要講AS/400呢?一來工作上的需求,這個我接觸很多,二來,SQL Server相關的範例太多,實在無須解說。

關於AS/400的資料檔,有使用過AS/400的應該都會知道,於AS/400產生資料檔後,通常會使用「從iSeries轉送資料」功能,將AS/400上的資料轉成Excel檔以便後續處理:
http://ithelp.ithome.com.tw/upload/images/20161213/20007221xrbxD4V7Q8.png

但是當你熟悉Access後,轉入的動作即可透過Access的匯入來進行,當匯入到Access後,即可透過SQL或者VBA來進行再次處理。

我們再回到「匯入」功能,開啟匯入功能後,可以看到可匯入的項目還蠻多種的:
http://ithelp.ithome.com.tw/upload/images/20161213/20007221GbH1RQ1x8s.png

我們選擇ODBC-Database來進行匯入:
http://ithelp.ithome.com.tw/upload/images/20161213/20007221tM6RZBwLzJ.png

開啟後,分為檔案資料來源與機器資料來源,我們切到機器資料來源:
http://ithelp.ithome.com.tw/upload/images/20161213/20007221Fwo1MBJ9k4.png

切到「機器資料來源」後,按下「新增」按鈕新增來源:
http://ithelp.ithome.com.tw/upload/images/20161213/20007221vxD6cFYFiu.png

選擇預設的「使用者資料來源」
http://ithelp.ithome.com.tw/upload/images/20161213/20007221CaIrRbmYrq.png

選擇Client Access ODBC Driver (32-bit)
http://ithelp.ithome.com.tw/upload/images/20161213/20007221niTaXrmTxd.png

完成
http://ithelp.ithome.com.tw/upload/images/20161213/20007221GQ9NJIHqHw.png

開啟設定畫面,請取一個自己看得懂的資料來源名稱,以及於系統欄位選擇伺服器的IP位址:
http://ithelp.ithome.com.tw/upload/images/20161213/20007221J9L7daQdwR.png

切到伺服器頁簽,輸入「檔案庫清單」名稱,如果不知道名稱可以看AS/400轉檔時,要填入的HostFile,這部份會填「檔案庫清單/檔案」,因此只要把「檔案庫清單」的名字填上,按下確定即可:
http://ithelp.ithome.com.tw/upload/images/20161213/200072215bclRaVwrp.png

完成後,可於資料來源處看到該名稱:
http://ithelp.ithome.com.tw/upload/images/20161213/20007221CPrhDZKC9z.png

於該名稱點兩下後及會進行連線,連線時需要有效的帳號密碼:
http://ithelp.ithome.com.tw/upload/images/20161213/20007221E0kzHbouHy.png

http://ithelp.ithome.com.tw/upload/images/20161213/20007221GlYq72X53D.png

開啟後,即可列出清單,這裡筆者為了安全,所以將敏感資料塗黑,並非跑出來會這樣黑漆漆的:
http://ithelp.ithome.com.tw/upload/images/20161213/20007221To7hhWwfb5.png

資料匯入後,即可於資料表清單中看到「檔案庫清單_檔案」結構的資料表,這就是匯入後的資料:
http://ithelp.ithome.com.tw/upload/images/20161213/200072218sF63BZr6R.png

編輯資料表後,即可看到相關的欄位,開啟資料表,也可以開啟相關資料:
http://ithelp.ithome.com.tw/upload/images/20161213/20007221LowZu2JwAw.png

後面,我提供一個轉入AS/400資料的VBA程式,該程式必須要先手動匯入資料檔後,產生了資料表,之後若有新資料,再用此程式更新資料:

Function ImportAS400(strSQL As String, cstrDestination As String, bnDelDestination As Boolean)
'由AS/400匯入資料表
'strSQL SQL語句
'cstrDestination '目的地
'bnDelDestination '是否先清除目的地資料
'
'

    Dim cn As ADODB.Connection, rs As ADODB.Recordset, intColIndex As Integer
    Dim wrkObj As Object
    Dim srcObj As Object
    
    Dim rsDao As DAO.Recordset
    
    Set cn = New ADODB.Connection
    
    cn.Open "Provider=IBMDA400;Data source=192.168.0.2;User Id=TEST;Password=TEST;"
    Set rs = New ADODB.Recordset
    rs.Open strSQL, cn, , , adCmdText
                
    Set db = CurrentDb
    
    'Set rsDao = db.OpenRecordset(cstrDestination, _
    dbOpenTable, dbFailOnError)

    Set rsDao = db.OpenRecordset(cstrDestination)
    
    '刪除原始資料檔內所有資料
    If bnDelDestination = True Then
        DoCmd.SetWarnings False
        DoCmd.RunSQL "DELETE * FROM " & cstrDestination, -1
        DoCmd.SetWarnings True
    End If
                
    '依序轉入AS/400上的資料
    Do While Not rs.EOF
         rsDao.AddNew
         For Each fld In rs.Fields
             strName = fld.Name
             rsDao.Fields(strName) = rs.Fields(strName).value
         Next fld
         rsDao.Update
         rs.MoveNext
    Loop
             
    rsDao.Close
    Set rsDao = Nothing
    Set db = Nothing
    
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing

End Function

以上程式使用ADO連線至AS/400然後再用DAO方式寫入Access中,Data source、User Id與Password請依照環境修改

使用以下寫法進行匯入新資料:
Sub ImportAS400測試()

Call ImportAS400("SELECT * FROM FILES.FILE", "FILES_FILE", True)

End Sub

如果沒有先建立資料表,直接匯入時就會出現錯誤訊息:
http://ithelp.ithome.com.tw/upload/images/20161213/20007221myz6aCevuD.png

以上的分享,對於有使用AS/400且需要下載資料加工的人員可以嘗試看看,希望對各位有幫助。


上一篇
Access VBA 的眉眉角角Day15: 使用WinRAR進行壓縮
下一篇
Access VBA 的眉眉角角Day17: 一些文字處理的子程式
系列文
Access VBA的眉眉角角30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言