筆者在接觸Access之前,只有學過部份SQL語法,資料庫軟體為SQLite與SQL Server Express,後來開始工作後,由於公司是用IBM AS/400伺服器,所以又接觸到了部份DB/2的語法,以及加強了資料庫的概念,後來又接觸到了Access,才知道,原來ODBC串連後,能做的事情還真多!
拉哩拉雜的講了一堆,今天其實是要分享匯入外部資料庫的方法,Access中,於資料表空白處,按下滑鼠左鍵,即可看到「匯入」功能:
由這裡,我們可以匯入AS/400的資料檔到Access中使用。為何要講AS/400呢?一來工作上的需求,這個我接觸很多,二來,SQL Server相關的範例太多,實在無須解說。
關於AS/400的資料檔,有使用過AS/400的應該都會知道,於AS/400產生資料檔後,通常會使用「從iSeries轉送資料」功能,將AS/400上的資料轉成Excel檔以便後續處理:
但是當你熟悉Access後,轉入的動作即可透過Access的匯入來進行,當匯入到Access後,即可透過SQL或者VBA來進行再次處理。
我們再回到「匯入」功能,開啟匯入功能後,可以看到可匯入的項目還蠻多種的:
我們選擇ODBC-Database來進行匯入:
開啟後,分為檔案資料來源與機器資料來源,我們切到機器資料來源:
切到「機器資料來源」後,按下「新增」按鈕新增來源:
選擇預設的「使用者資料來源」
選擇Client Access ODBC Driver (32-bit)
完成
開啟設定畫面,請取一個自己看得懂的資料來源名稱,以及於系統欄位選擇伺服器的IP位址:
切到伺服器頁簽,輸入「檔案庫清單」名稱,如果不知道名稱可以看AS/400轉檔時,要填入的HostFile,這部份會填「檔案庫清單/檔案」,因此只要把「檔案庫清單」的名字填上,按下確定即可:
完成後,可於資料來源處看到該名稱:
於該名稱點兩下後及會進行連線,連線時需要有效的帳號密碼:
開啟後,即可列出清單,這裡筆者為了安全,所以將敏感資料塗黑,並非跑出來會這樣黑漆漆的:
資料匯入後,即可於資料表清單中看到「檔案庫清單_檔案」結構的資料表,這就是匯入後的資料:
編輯資料表後,即可看到相關的欄位,開啟資料表,也可以開啟相關資料:
後面,我提供一個轉入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
如果沒有先建立資料表,直接匯入時就會出現錯誤訊息:
以上的分享,對於有使用AS/400且需要下載資料加工的人員可以嘗試看看,希望對各位有幫助。