- 締切済み
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は実際のサーバ名ではありません。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- coldblade
- ベストアンサー率20% (2/10)
ExcelでOracleへ接続用のソフトがあります。
お礼
回答ありがとうございます。内容確認してみます。