- ベストアンサー
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
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
INSERT 先のテーブルのリンクテーブルを作っておいて、そのテーブルへの追加クエリを作る というのはどうでしょうか?
その他の回答 (2)
- AlexSuns
- ベストアンサー率67% (78/115)
こんな感じでできるのでは? オラクルの環境が無いので試していませんが...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するほうが楽です さらに速いと思われます
お礼
ありがとうございます。 今回はリンクテーブルを作成しました。けど、ローカルのテーブル等 でこの方法はかなり有効ですね。参考にさせて頂きます。ありがとう ございました
SELECT TESUTO.* INTO TABLENAME FROM TESTO; で新規テーブルTABLENAMEに全件レコードをコピーします。 オラクルがリンクテーブルでない場合のデータ型がどうなるかは、未確認です。 クエリを作ってみて、SQLビューに変更するとSQL文が見れます。 オラクルのSQLではセミコロンは余分だったかもしれません。
お礼
リンクテーブルが楽みたいですね。ありがとうございます。
お礼
リンクテーブルとは頭が回りませんでした。 ありがとうございました。