前提・実現したいこと
サーバー上にあるmdbファイルのAテーブルの内容を、ローカルフォルダの同名mdbの同名Aテーブルに丸々コピーしたい。
ツールはExcel VBAでAccessにADOで接続します。
複数のmdbへの接続ができればよいのですが、できなさそうなので下記のような方法で実装しました。
【動作概要】
①サーバーmdbのAテーブルの内容を一旦変数へ格納し接続を切断E
②ローカルmdbへ接続しAテーブルの内容をクリア
③変数からAテーブルへINSERT実行
発生している問題・エラーメッセージ
エラー無く実行できるのですが、mdbを開いて確認すると、
上記②の操作までは反映されているのですが、③の操作が反映されていません。
SQL文も問題無さそう(ほかのモジュールでは動いていたものを流用)なので、mdbの接続を切り替える方法などに
何か問題があるのではと思っています。
該当のソースコード
Set adoCn = CreateObject("ADODB.Connection") 'ADOコネクションオブジェクトを作成
Set adoRs = CreateObject("ADODB.Recordset") 'ADOレコードセットオブジェクトを作成
'サーバーMDBへ接続
adoCn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & AccessFilePath & ";Jet OLEDB:Database Password=" & DBPWD & ";" 'Accessファイル(~2003)を開く
'adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBpath & ";" 'Accessファイル(2007~)を開く
'全データの取得 AccessSQL = "SELECT 番号2,説明2,機器コード2,機器名2,期限2,対策2,コード2 FROM " & G_AccessTableName_Masta & "" 'SQL実行 adoRs.Open AccessSQL, adoCn, adoOpenDynamic Do Until adoRs.EOF = True RecordMaxCount = RecordMaxCount + 1 adoRs.MoveNext Loop '初期化 If adoRs.BOF <> True Then adoRs.MoveFirst ReDim tempDBRecord(RecordMaxCount, 7) As String Do Until adoRs.EOF = True tempDBRecord(j, 1) = adoRs!番号2 tempDBRecord(j, 2) = adoRs!説明2 tempDBRecord(j, 3) = adoRs!機器コード2 tempDBRecord(j, 4) = adoRs!機器名2 tempDBRecord(j, 5) = adoRs!期限2 tempDBRecord(j, 6) = adoRs!対策2 tempDBRecord(j, 7) = adoRs!コード2 adoRs.MoveNext j = j + 1 Loop adoCn.Close adoRs.Close Set adoRs = Nothing 'オブジェクトの破棄 Set adoCn = Nothing Set adoCn2 = CreateObject("ADODB.Connection") 'ADOコネクションオブジェクトを作成 Set adoRs2 = CreateObject("ADODB.Recordset") 'ADOレコードセットオブジェクトを作成 'ローカルMDBへ接続 AccessLocalPath = G_AccessFile_LocalPath & G_AccessFile_LocalName adoCn2.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & AccessLocalPath & ";Jet OLEDB:Database Password=" & DBPWD & ";" 'Accessファイル(~2003)を開く 'サーバーMDBから取得した情報をローカルMDBへ書き込み 'コピー前に一覧をクリアする AccessSQL = "DELETE FROM " & G_AccessTableName_Masta & "" adoCn2.Execute AccessSQL 'コピー処理開始 j = 1 '初期化 Do Until j = RecordMaxCount AccessSQL = _ "INSERT INTO " & G_AccessTableName_Masta & "(番号2,説明2,機器コード2,機器名2,期限2,対策2,コード2) " _ & "VALUES('" & tempDBRecord(j, 1) & "','" & tempDBRecord(j, 2) & "','" & tempDBRecord(j, 3) & "','" & tempDBRecord(j, 4) & "'," _ & "#" & tempDBRecord(j, 5) & "#,'" & tempDBRecord(j, 6) & "','" & tempDBRecord(j, 7) & "')" adoCn2.Execute AccessSQL 'Debug.Print AccessSQL j = j + 1 Loop adoRs2.Close 'レコードセットのクローズ adoCn2.Close
試したこと
オブジェクトを別名で用意したりしましたが一向に反映されません。
補足情報(FW/ツールのバージョンなど)
Excel 2007、Access 2007を使用
回答2件
あなたの回答
tips
プレビュー