外部ACCESS と リンクする 2/3 共通モジュール
Public Function ODBC_LINK_FUNC() As Integer
'--------------------------------------------------
' LINK接続
'--------------------------------------------------
On Error GoTo Err_ODBC_LINK_FUNC
'リンクテーブルエリア
Dim wDMtb(100) As String
Dim wDMtb_KBN(100) As String
Dim wDMtb_limit As Long
Dim wTBL As String
Dim wDM_i As Long
Dim wi As Long
'ODBC接続定義
Dim wDSN As String
Dim wDBQ As String
Dim wPWD As String
Dim wUSER As String
Dim wODBC As String
Dim wAccess_Pass As String
Dim wAccess_PWD As String
Dim wORCLtb As String
ODBC_LINK_FUNC = 0
'警告メッセージをOFF
DoCmd.SetWarnings False
'DB定義
Dim cn As ADODB.Connection
Dim rs0 As ADODB.Recordset
Dim rs1 As ADODB.Recordset
'ADO カレントに接続
Set cn = CurrentProject.Connection
'--------------------------------------------------
'1.リンクテーブルの取り込みと初期処理(削除)
Set rs0 = New ADODB.Recordset
rs0.Open "ODBC_LINK_TB", cn, adOpenKeyset, adLockOptimistic
wDMtb_limit = 100
wDM_i = 0
Do Until rs0.EOF
If wDM_i > wDMtb_limit Then
MsgBox "読み込みテーブルがあふれました。処理を中止します。"
rs0.Close: Set rs0 = Nothing
cn.Close: Set cn = Nothing
ODBC_LINK_FUNC = 1
Exit Function
End If
wDMtb(wDM_i) = rs0!linkTB_NM
wDMtb_KBN(wDM_i) = rs0!linkTB_KBN
wDM_i = wDM_i + 1
rs0.MoveNext
Loop
rs0.Close: Set rs0 = Nothing
'ADO カレント切断
cn.Close: Set cn = Nothing
'リンクテーブルを削除する
For wi = 0 To (wDM_i - 1)
'リンクテーブル名設定
wTBL = wDMtb(wi)
'リンクテーブルの削除
DoCmd.DeleteObject acTable, wTBL
Next
'--------------------------------------------------
'2.テーブルをリンクする
'ODBC接続用値設定
wDSN = ";DSN=" & ""
wDBQ = ";DBQ=" & ""
wPWD = ";PWD=" & ""
wUSER = "" & "."
wODBC = "ODBC" & wDSN & wDBQ & wPWD
'ACCESS接続用値設定
Dim myPASS As String
myPASS = CurrentProject.Path
wAccess_Pass = myPASS & "\db\techDD.mdb"
wAccess_PWD = "techDD"
'--------------------------------------------------
'2.テーブルをリンクする パスワード付ACCESSとリンクする。
'テーブルをリンクする。
Dim dbs As DAO.Database
Dim tdf As DAO.TableDef
Set dbs = Application.CurrentDb
For wi = 0 To (wDM_i - 1)
'リンクテーブル名設定
wTBL = wDMtb(wi)
'MsgBox "debug: " & wTBL
If wDMtb_KBN(wi) = "ACCESS" Then
Set tdf = dbs.CreateTableDef(wTBL)
'Let tdf.Connect = "MS Access;DATABASE=C:\ac_data\db1.mdb;PWD=hogehoge;"
Let tdf.Connect = "MS Access;DATABASE=" & wAccess_Pass & ";PWD=" & wAccess_PWD & ";"
Let tdf.SourceTableName = wTBL
dbs.TableDefs.Append tdf
Set tdf = Nothing
End If
Next
dbs.Close
Set dbs = Nothing
'--------------------------------------------------
'2.テーブルをリンクする ODBC用
'テーブルをリンクする。
For wi = 0 To (wDM_i - 1)
'リンクテーブル名設定
wTBL = wDMtb(wi)
'●テーブルのリンク
'●wODBC = "ODBC;DSN=DEMO20021205;DBQ=DEMOACS;PWD=acsuser"
'●wOdbc=接続文字列,acTable,orclのテーブル名
If wDMtb_KBN(wi) <> "ACCESS" Then
wORCLtb = wUSER & wTBL
DoCmd.TransferDatabase acLink, "ODBC データベース", _
wODBC, acTable, wORCLtb, wTBL
End If
Next
Exit_ODBC_LINK_FUNC:
Exit Function
Err_ODBC_LINK_FUNC:
'Err.Number = 7874 :削除するテーブルが見つからなかった。
'Resume Next :エラー発生の次の行から実行せよ
If Err And Err.Number = 7874 Then
Resume Next
End If
ODBC_LINK_FUNC = 9
MsgBox Err.Number & " : " & Err.Description
Resume Exit_ODBC_LINK_FUNC
End Function