• ベストアンサー
  • 困ってます

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

  • 質問No.9004385
  • 閲覧数444
  • ありがとう数2
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 86% (65/75)

オラクルから、必要なデータを抜出し加工の為の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しかインストールしてませんので、オラクルのテーブルをリンクしてくれませんでした。

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

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

  • 回答No.3
  • ベストアンサー

ベストアンサー率 75% (678/900)

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

お礼率 86% (65/75)

piroin654様

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

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

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

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

ご親切にアドバイス頂きありがとうございます。
投稿日時:2015/07/02 17:24

その他の回答 (全2件)

  • 回答No.2

ベストアンサー率 75% (678/900)

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

ベストアンサー率 75% (678/900)

新しいテーブルを作り、
フィールドはカラム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
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ