• 締切済み
  • 困ってます

OracleからAccessへのインポート

OracleのサーバからAccessのクライアントへ(1)のSQL文を使って Accessのテーブルヘインポートしたいのですが、どのように(2) に付け足せば良いのでしょうか?どなたかご教示願います。 (1) SELECT S.KTN_COD ,K.KTN_MEI FROM T_SYUKA S ,M_KTN K WHERE S.KTN_COD=K.KTN_COD (2) Private Sub abc_Click() Dim adoCnn As Object 'ADODB.Connection Dim adoRec As Object 'ADODB.Recordset Dim tblName As String DoCmd.SetWarnings False Set adoCnn = CreateObject("ADODB.Connection") adoCnn.Open "Driver={Microsoft ODBC for Oracle};" & _ "CONNECTSTRING=dns; UID=hoge; PWD=hoge;" strSQL = "SELECT S.KTN_COD ,K.KTN_MEIFROM T_SYUKA S ,M_KTN K" _ &"WHERE S.KTN_COD=K.KTN_COD" adoCnn.Execute (strSQL) adoCnn.Close Set adoCnn = Nothing Set adoRec = Nothing End Sub

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数449
  • ありがとう数5

みんなの回答

  • 回答No.1

数千件のデータならOracleのリンクテーブルを作成して Select文をサブクエリとしたInsert文1回で挿入してしまう のが一般的かと思います。 Recordsetに入れてあるデータでは、接続情報もテーブルの 情報も違いますので、1行1行ループで回してデータを取り出し、 処理していく事になるかと思います。 Accessをよく使う方はDoCmd.TransferDatabaseを使うのでは ないかと思いますが、慣れていない人はInsert文を1行1行編集 すればいいと思います。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • ACCESSでレコード数の取得の仕方

    Aテーブルのレコード数を取得しようと思い、次のPGを考えました。(Aテーブルには10件のデータが入っています。)ですが、「-1」という数値が返ってきます。なぜでしょうか? Dim objADOCON As ADODB.Connection Dim objADORS As ADODB.Recordset Dim strSQL As String Set objADOCON = Application.CurrentProject.Connection strSQL = "SELECT * FROM Aテーブル" Set objADORS = objADOCON.Execute(strSQL) MsgBox objADORS.RecordCount , vbOKOnly, "レコード数"

  • Oracleとの接続について教えてください

     仕事ではじめてASPを作ることになったのですが、 Oracleとの接続がうまくできません。人から「これで接続できるはず」と言われたソースを使ったのですが、接続できませんでした。すみませんが、アドバイスをお願いします!! ******************* <HTML> <HEAD> </HEAD> <BODY> <% Dim cnnSample Dim rstSample Dim strConnectString Dim strSQL Set cnnSample = CreateObject("ADODB.Connection") strConnectString = "Provider=msdaora;User Id=***;Password=***;server=***;database=***;" cnnSample.Open strConnectString Set rstSample = CreateObject("ADODB.Recordset") strSQL = "SELECT * FROM SAMPLE" rstSample.Open strSQL, cnnSample, 3, 1, 1 %> <%Do Until rstSample.EOF%> <%=rstSample("NAME")%><BR> <%rstSample.MoveNext%> <%Loop%> <% rstSample.Close Set rstSample = Nothing cnnSample.Close Set cnnSample = Nothing %> </BODY> </HTML> **************** 以下、エラー画面 Microsoft OLE DB Provider for Oracle エラー '80004005' ORA-03121: インタフェース・ドライバが接続されていないため関数は実行されません。 /ado1.asp, 行 15 **************** すごくしょうもない間違いだったらすみません。

  • Excelファイルのデータをテーブルへインポートできない

    お世話になります。 このコードは「ここが知りたかった!ACCESS VBA 500の技」 の452ページに載っているものです。 エラーで動作しません。 私には分からないので教えて下さい。 Sub ExceltoMDBTable() Dim adoExcelCon As New ADODB.Connection Dim adoSheetRst As ADODB.Recordset Dim strSQL As String Dim adoMdbCon As New ADODB.Connection adoExcelCon.Open "Driver={Microsoft Excel Driver (*.xls)};" & _ "DBQ=c:\temp\test.xls;ReadOnly=0;" Set adoMdbCon = Application.CurrentProject.Connection Set adoSheetRst = adoExcelCon.Execute("select distinct 得意先コード,得意先名 from [Sheet1$]") Do Until adoSheetRst.EOF = True strSQL = "" strSQL = strSQL & "insert into test" strSQL = strSQL & " (得意先コード" strSQL = strSQL & " ,得意先名" strSQL = strSQL & " ,登録日 )" strSQL = strSQL & "Values ( '" & adoSheetRst("得意先コード") & "'" strSQL = strSQL & " ,'" & adoSheetRst("得意先名") & "'" strSQL = strSQL & " ,#" & Date & "# )" adoMdbCon.Execute (strSQL) adoSheeyRst.MoveNext Loop adoSheetRst.Close adoMdbCon.Close adoExcelCon.Close Set adoSheetRst = Nothing Set adoMdbCon = Nothing Set adoExcelCon = Nothing End Sub

  • レコードの削除

    VB6.0 ACCESSで開発しています。 t_nyukoテーブルのデータを全て削除するのは下記のように 出来たのですが dataGridに表示されているものを1つ選択し 選択されたものだけ削除したいのですがどうすればいいのでしょうか? よろしくお願いします。 Private Sub Command1_Click() Dim cn As New ADODB.Connection Dim cmd As ADODB.Command Dim cat As New ADODB.Command Dim strSQL As String   Set cn = New ADODB.Connection cn.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\temp\db2.mdb" cn.Open cat.ActiveConnection = cn strSQL = "DELETE FROM t_nyuko " Set cmd = New ADODB.Command cmd.ActiveConnection = cn cmd.CommandText = strSQL cmd.Execute cn.Close Set cmd = Nothing Set cn = Nothing Set cat = Nothing End Sub

  • ACCESSでORACLEのサーバからデータを取得

    ACCESSでORACLEのサーバからデータを取得しようと試みましたがうまくいきません。どこを改善したらよろしいでしょうか?どなたかご教示ください。 クライアント:WINDOWS7 ACCESS2010 サーバ:WIN-SV2003 ORACLE10G 以下のエラーがVBAで取得しようとするとでてきてしまいます。 「[Microsoft][ODBC driver for Oracle][Oracle]ORA-00923:FROMキーワードが指定の位置にありません。」 SQL部分の空白は見直しました。 Private Sub コマンド610_Click() Dim adoCON As Object Dim rs As Object Dim oraclebox() As Variant Dim rdsu As Long On Error GoTo Err_Han 'データベースに接続する' Set adoCON = CreateObject("ADODB.Connection") adoCON.Open "Driver={Microsoft ODBC for Oracle};" & _ "CONNECTSTRING=*****; UID=abcd; PWD=1234;" sqlstr = "SELECT J.KTN_COD,J.SBN,J.GYOSYA_COD,G.GYOSYA_MEI" _ & "FROM JITU_SHARYOU J ,GYOSYA G" _ & "WHERE J.GYOSYA_COD = G.GYOSYA_COD" Set rs = adoCON.Execute(sqlstr) rs.MoveFirst 'レコード数カウント' Do Until rs.EOF rdsu = rdsu + 1 rs.MoveNext Loop '配列を再定義' ReDim oraclebox(rdsu, 4) i = 1 rs.MoveFirst Do Until rs.EOF oraclebox(i, 1) = rs!KTN_COD oraclebox(i, 2) = rs!SBN oraclebox(i, 3) = rs!GYOSYA_COD oraclebox(i, 4) = rs!GYOSYA_MEI i = i + 1 rs.MoveNext Loop rs.Close Set rs = Nothing '警告ダイアログをオフ' DoCmd.SetWarnings False DoCmd.RunSQL "DELETE FROM SAMPLE_T" 'Oracleデータを書き込み' For i = 1 To rdsu DoCmd.RunSQL "INSERT INTO SAMPLE_T(KTN_COD,SBN,GYOSYA_COD,GYOSYA_MEI)" _ & "VALUES('" & oraclebox(i, 1) & "','" & oraclebox(i, 2) & "','" & oraclebox(i, 3) & "'," & oraclebox(i, 4) & ")" Next i '警告ダイアログをオン' DoCmd.SetWarnings True Exit Sub Err_Han: ' エラー処理' MsgBox (Err.Description) End Sub *単一のテーブルであればDoCmd.TransferDatabase acImpor等を使うのですが、場合によっては今後データ量が多かったりより複数のテーブルを扱うことになるので。

  • ACCESS VBA

    ACCESSで検索フォームを作りたいと思っています。 VBAを使って行きたいと思うのですが、うまくいきません。 希望としては、該当するレコードのデータを抽出したいです。 よろしくお願いいたします。 ※現段階でのソースを書いてみました。 最終的に行いたい処理とは違うのですが、根本的に間違っているようなので簡略化しました。 /------------------------------------------------/ Private Sub コマンド1_Click() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim sql As String '接続 Set cn = CurrentProject.Connection 'レコードセットを取得 Set rs = New ADODB.Recordset sql = "SELECT * FROM 従業員データ " & _ "WHERE 年齢=30" rs.Open sql, cn, adOpenDynamic, adLockReadOnly rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub /------------------------------------------------/

  • Access ADOについて質問です。

    Access ADOについて質問です。 以下コードでレコードセットを返す関数を使用しています。 動作的には問題ないのですが、標準モジュール内のレコードセットをClose及びNothingしていないのが気になります。 Private Sub Form_Open(Cancel As Integer) Dim rs2 As ADODB.Recordset Set rs2 = New ADODB.Recordset Set rs2 = CreateRecordSet("SELECT * FROM T_Standard;") Set Me.Recordset = rs2 rs2.Close: Set rs2 = Nothing end sub '標準モジュール Public Function CreateRecordSet(strSQL As String) As ADODB.Recordset Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=O:\標準DB\StandardBackEnd.mdb" cn.Open Set rs = New ADODB.Recordset rs.Open strSQL, cn, adOpenStatic, adLockReadOnly Set CreateRecordSet = rs ' rs.Close: Set rs = Nothing   ←この部分 ' cn.Close: Set cn = Nothing   ←この部分 End Function 標準モジュール内ではCloseやNothingしなくてもメモリの開放は行われているのでしょうか? アドバイスよろしくお願いいたします。

  • DBから取得したオブジェクトの受け渡し方法

    はじめましてVB初心者でわけが分からなくなっています。DBをクローズした後に取得したレコードセットを他の関数に渡すにはどうしたらよいでしょうか?おそらく、そんなのcloseせずにやればいいと思うかもしれませんが、可能かどうかがわかりません。どうか教えてくださいよろしくお願い致します。 下記のコードにて行ってます。Set rs = cn.Execute(strSQL)で取得しています。rsをDBを閉じた後も他の関数に渡せるようにしたい訳です。m(..)m Dim cn As Object Dim rs As Object Private Sub getData() Dim strSQL As String Set cn = CreateObject("ADODB.Connection") cn.Open "省略" strSQL = "SELECT * FROM swan" Set rs = cn.Execute(strSQL) Set rs = nothing Set cn.close Set cn = nothing End Sub

  • 二つのMDBファイルの間のデータのやり取り

    おせわになります。みなさんの知恵を貸してください。 いかがシステム構成です。 A.mdb(テーブル:Work1) B.mdb(テーブル:Work2) A.mdbはカレントデータベースです。B.mdbはDSN=KANRIで アクセスしたいです。 現在Work1のデータをWork2に追加したいのですが、どのような方法が考えられますか? ちなみに以下のコードを書いてみました。 -------------------------------------------------- Dim cn1 As New ADODB.Connection, cn2 As New ADODB.Connection Dim rs1 As New ADODB.Recordset, rs2 As New ADODB.Connection Dim com As New ADODB.Command, mysql As String Set cn1 = CurrentProject.Connection cn2.ConnectionString = "provider=MSDASQL;DSN=KANRI" mysql = "insert into Work2 select * from Work1" com.activeconnection = cn2 com.commandtext = mysql com.Execute Set com = Nothing rs1.Close: Set rs1 = Nothing rs2.Close: Set rs2 = Nothing cn1.Close: Set cn1 = Nothing cn2.Close: Set ch2 = Nothing -------------------------------------------------- Work1は見当たらないとエラーが出ました。 どなたか教えてください。 rs1.EoF Loop をまわしながら一行ずつ追加するしかないでしょうか?

  • 【VBA】アタッチとデタッチについての認識

    VBAを勉強中の者です。カテ違いならすいません。 ******************************************************* Sub test1() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordset cn.Open "Provider=SQLOLEDB;Data Source=localhost\SQLEXPRESS; " & _ "Initial Catalog=" & データベース名 & ";" & _ "Integrated Security=SSPI" rs.Open "テーブル1", cn, adOpenStatic, adLockOptimistic MsgBox rs.RecordCount rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub ******************************************************* このコードで アタッチは「Set cn = New ADODB.Connection」、 デタッチは「cn.Close: Set cn = Nothing」 になりますか? ご教授よろしくお願い致します。