みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

オラクルからAccessにデータ追加

オラクルから、必要なデータを抜出し加工の為のDBをAccessで作成していますが、オラクルから抜き出したデータ(レコードセット)を、どうやってAccessのテーブルに書き込めばよいかがわかりません。

◎環境
Oracle:10g
Access:2010

◎現在の状況
Dim CON As New ADODB.Connection
Dim RS As ADODB.Recordset
Dim SQL As String
Dim i As Integer

'DB接続定義
CON.Open "DSN=DNS名;UID=ユーザー名;PWD=パスワード;"

'SQL文
SQL = "SELECT "
SQL = SQL & "カラム1,"
SQL = SQL & "カラム2,"
SQL = SQL & "カラム3"
SQL = SQL & "FROM オラクルテーブル名 "
SQL = SQL & "WHERE 抽出条件 "
SQL = SQL & "AND 抽出条件"
SQL = SQL & "GROUP BY カラム"

SET RS = CON.EXCUTE(SQL)

For i = 1 To 10
Debug.Print rs(カラム1) & rs(カラム2)
next i
ここまでは、オラクルのテーブルから、レコードセットにデータが取り込まれてます。

rs.close: SET RS = Nothing
con.close:SET CON=Nothing

end sub

案1
レコードセットのデータを、Access側のテーブルにループで回して、1行ずつデータ追加
案2
INTO句で直接、テーブル作成

調べていて、2通りのやり方があると思うのですが、どちらにしても、テーブルへの書き込み方がわかりません。

案1の場合、Access側のテーブルを開いてデータ追加する方法
※同時に2つのテーブルを開くことになるのでは?
案2の場合、SQL文はオラクルで処理する為の物なので、AccessテーブルのINTO句が使えるのか?

オラクルのテーブルをリンクする事も考えたのですが、実際動かすPCにはAccessRuntimeしかインストールしてませんので、オラクルのテーブルをリンクしてくれませんでした。

よい方法があれば、アドバイスを頂けたら幸いです。

投稿日時 - 2015-07-01 22:55:14

QNo.9004385

困ってます

質問者が選んだベストアンサー

もし、既存のテーブルにデータをいれるというのであれば、
No1でいいのですが。「新しいテーブル名」→「既存のテーブル名」。
既存のテーブルにデータが存在するのか、あるいはデータを
入れ替えるのかによって方法はことなりますが、
データの取り扱いがわからないので
No1とNo2の両方を回答とすることにします。

投稿日時 - 2015-07-02 13:41:12

お礼

piroin654様

3回もアドバイス頂きありがとうございます。

Access側のテーブルは作成済みなので、1の方法で問題ありません。

また、Rantimeの制限について、お教え頂きありがとうございます。
これ、ずっと悩んでました、なるほどRantimeでは新規テーブルが作れないですね。
以前作った、動かなかったシステムで、確かにテンポラリー新規テーブル作成してました。

あわせて、"rs2" コネクションとレコードセットを別に作ればよいのですね、試してみます。

ご親切にアドバイス頂きありがとうございます。

投稿日時 - 2015-07-02 17:24:38

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

No1です。失礼しました。
>実際動かすPCにはAccessRuntime
これを見逃していました。ランタイム環境では
テーブルなどの新規のオブジェクトは作成できないので、
取り出したデータをどうするのかによりますが、
たとえば、Excelなり、テキストなりに出力
するコードを作るというのはどうですか。

投稿日時 - 2015-07-02 13:01:07

ANo.1

新しいテーブルを作り、
フィールドはカラム1からカラム3を設定し、
以下のコードを追加してテーブルに取り込めば
いいのでは?
フィールドの型は各カラムの型にあわせるか、あるいは
テキスト型にしておくかですか。



Dim rs2 As ADODB.Recordset

rs2.Open "新しいテーブル名", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
rs.MoveFirst
Do Until rs.EOF
rs2.AddNew
rs2!カラム1 = rs!カラム1
rs2!カラム2 = rs!カラム2
rs2!カラム3 = rs!カラム3
rs2.Update

rs2.Close: Set rs2 = Nothing

投稿日時 - 2015-07-02 12:29:52

あなたにオススメの質問