EXCEL VBAでデータベース更新
OFFICE2010
ORACLE 9.1
あるサーバ(A)にあるデータを(B)にコピーする方法を教えていただきたく。
サーバ(A)には、オーダ情報が毎日登録されます。
サーバ(B)は、ソフト開発用に用意されていたサーバで、
このサーバを利用して、EXCEL連携でデータ参照したいと思っています。
EXCEL VBAでサーバ(A)、サーバ(B)両方とも連携可能なので、
直接サーバ(A)を参照すればデータ自体は見られます。
しかし、他部門にツールとして渡すので、データベースを壊されたら困るので、
サーバ(B)を参照サーバとして利用したいというおもいです。
実施したいのは、
サーバ(A)のinfoというテーブルから
サーバ(B)のinfoというテーブルへデータを更新する方法。
サーバ(A)とサ-バ(B)の差分を更新する方法もあるかと思いますが、
サーバ(A)は、レコード自体が更新されていくので、
サーバ(B)のinfoデーブルの内容を全て削除してから、
サーバ(A)のinfoテーブルの内容をコピー
という方法を教えていただきたく。
参考に、下記はサーバ(A)のinfoテーブルから全レコードを取得するマクロです。
Private Sub receive_Click()
Application.ScreenUpdating = False
'oo4o用のオブジェクト変数の宣言
Dim OraSession As Object 'セッション
Dim OraDatabase As Object 'データベース
Dim rs As Object 'データセット(レコードセット)
Dim rownum As Long
Dim colnum As Integer
'セッションオブジェクトの生成
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
'oo4oデータベースオブジェクトの生成(サーバA)
Set OraDatabase = OraSession.OpenDatabase("A", "name/password", 0&)
'oo4oデータセット(レコードセット)の生成(全データを返すレコードセットの生成)
Set rs = OraDatabase.CreateDynaset("select * from info", 0&)
'すでに表示されている内容のクリア
Call ClearDisp
'フィールド名の表示
For colnum = 0 To rs.Fields.Count - 1
ActiveSheet.Cells(2, colnum + 2) = rs(colnum).Name
Next
'データの表示
rownum = 0
Do Until rs.EOF
For colnum = 0 To rs.Fields.Count - 1
ActiveSheet.Cells(rownum + 3, colnum + 2) = rs(colnum).Value
Next
rs.MoveNext
rownum = rownum + 1
Loop
'セル幅の自動調整
ActiveSheet.Columns("B:I").EntireColumn.AutoFit
'オブジェクトのクローズ
rs.Close
'各種オブジェクトの開放
Set rs = Nothing
Set OraDatabase = Nothing
Set OraSession = Nothing
Application.ScreenUpdating = True
End Sub
B2からBI2までがタイトル
B3からBI10000くらいまでデータがあります。
D2列がシリアル番号になっており、同じ番号は登録されません。
マクロ、全くの初心者です。
ベタのコードで教えていただきたく。
上記マクロは、ホームページに記載されていたものを分かる範囲で変更したものです。
サーバ(B)からのデータ取得はAがBになるだけです。
'oo4oデータベースオブジェクトの生成(サーバB)
Set OraDatabase = OraSession.OpenDatabase("B", "name/password", 0&)
※A,Bは実際のサーバ名ではありません。