• ベストアンサー

accessとオラクルの連携について

お世話になります。アクセスでテーブルのデータをSQL文で取得し、 そのデータをオラクルのテーブルにinsertしたいと思ってます。 ただ、フィールドの数が40個もあるので insert into ・・・・Fields(0),Fields(1)・・・・ と記述するのはかなり面倒なので何かいい方法はないでしょうか よろしくお願いします。 なお、access側とオラクル側のテーブルは同じ型です。 ’ローカルテーブルのデータを取得 rec.Open "select * from tesuto", cnn ’取得したデータをinsertする Do Until rec.EOF sql= insert into value(Fields(0),Fields(1),・・・ rec1.Open "select * from tesuto1", cnn1 Loop

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

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

INSERT 先のテーブルのリンクテーブルを作っておいて、そのテーブルへの追加クエリを作る というのはどうでしょうか?

kou99
質問者

お礼

リンクテーブルとは頭が回りませんでした。 ありがとうございました。

その他の回答 (2)

  • AlexSuns
  • ベストアンサー率67% (78/115)
回答No.3

こんな感じでできるのでは? オラクルの環境が無いので試していませんが...orz ※Insert文のところはたぶん修正が必要です   Dim connAccess As ADODB.Connection   Dim rs     As ADODB.Recordset   Dim fld     As ADODB.Field   Dim sql     As String   Dim connOracle As ADODB.Connection      Set connAccess = Application.CurrentProject.Connection      Set connOracle = New ADODB.Connection   connOracle.Open "DSN=XXXXX; UID=XXXXX; PWD=XXXXX;"      sql = "select * from tesuto"   Set rs = connAccess.Execute(sql)      Do Until rs.EOF          sql = ""     For Each fld In rs.Fields       If Len(sql) > 0 Then sql = sql & ","       sql = sql & "'" & rs.Fields(fld.Name).Value & "'"     Next     sql = "inset into tesuto values (" & sql & ")"          connOracle.Execute sql          rs.MoveNext   Loop      rs.Close   connAccess.Close   connOracle.Close      Set rs = Nothing   Set connAccess = Nothing   Set connOracle = Nothing #1さんが言われるようにオラクルからリンクテーブルを作成し、そのテーブルにInsertするほうが楽です さらに速いと思われます

kou99
質問者

お礼

ありがとうございます。 今回はリンクテーブルを作成しました。けど、ローカルのテーブル等 でこの方法はかなり有効ですね。参考にさせて頂きます。ありがとう ございました

noname#60992
noname#60992
回答No.2

SELECT TESUTO.* INTO TABLENAME FROM TESTO; で新規テーブルTABLENAMEに全件レコードをコピーします。 オラクルがリンクテーブルでない場合のデータ型がどうなるかは、未確認です。 クエリを作ってみて、SQLビューに変更するとSQL文が見れます。 オラクルのSQLではセミコロンは余分だったかもしれません。

kou99
質問者

お礼

リンクテーブルが楽みたいですね。ありがとうございます。

関連するQ&A