過去ログ

                                Page      96
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼レコードセットをそのままテーブルのロードしたい  しろまる 02/11/12(火) 1:13
   ┗Re:レコードセットをそのままテーブルのロードしたい  こうちゃん 02/11/13(水) 9:06

 ───────────────────────────────────────
 ■題名 : レコードセットをそのままテーブルのロードしたい
 ■名前 : しろまる
 ■日付 : 02/11/12(火) 1:13
 -------------------------------------------------------------------------
   いつもお世話になっております。
お知恵を貸してください。。

実現したいことは、レコードセットをそのままADDNEWメソッドで
ACCESS上のテーブルにINSERTすることです.
現在ORACLE9iとACCESS2000で開発しています.

(コード例)
Sub Command1_Click()
 Dim DB As DAO.Database
 Dim qdf As DAO.QueryDef
 Dim SQL As String
 Dim rs As DAO.Recordset
 Dim ConnectStr As String

 ConnectStr = "ODBC;DSN=DSN名;UID=ACCESS01;PWD=ACCESS01;"

 SQL = "SELECT MAIN_CODE,SYS_CODE FROM TABLE1 WHERE MAIN_CODE ='001
'", '%');"
  Set DB = CurrentDb()
 Set qdf = DB.CreateQueryDef("")
 
 With qdf
  .Connect = ConnectStr
  .SQL = SQL
  .ReturnsRecords = True
  Set rs = .OpenRecordset
    ↑このレコードセットをACCESS上のテーブルにそのまま
     INSERTしたい. 
End With
 
End Sub


レコードセットをそのままテーブルにINSERTするにはどのように
ADDNEWメソッドを記述すればよいかが分かりません。
大変申し訳ありませんが、ご教示願いたいと思います。

例えば、”T01"という既存のテーブルにINSERTするつもりです。
テーブル名"T01"
項目(MAIN_CODE,SYS_CODE)

Dim Mydb As Database
 
Do While Not dynOra.EOF
  Mydb.Execute "insert into T01" & _
     "(MAIN_CODE,SYS_CODE)" & _
     " VALUES " & _
      "(" & rs.Fields & ");"
  dynOra.MoveNext
  Loop

↑上記の例だと、テーブルにレコードがインサートされませんでした.

どうかご教示願います。

 ───────────────────────────────────────  ■題名 : Re:レコードセットをそのままテーブルのロードしたい  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 02/11/13(水) 9:06  -------------------------------------------------------------------------
   しろまるさん、おはようございます。

しろまるさんのコードではADDNEWメソッドを使っていないようですが、要はレコードが挿入できればいいのですよね?

しろまるさんのコードでは、どこのデータを読んでどこのテーブルに挿入するのかがチョッと判然としないのですが・・

>実現したいことは、レコードセットをそのままADDNEWメソッドで
>ACCESS上のテーブルにINSERTすることです.
>現在ORACLE9iとACCESS2000で開発しています.
>
>(コード例)
>Sub Command1_Click()
> Dim DB As DAO.Database
> Dim qdf As DAO.QueryDef
> Dim SQL As String
> Dim rs As DAO.Recordset
> Dim ConnectStr As String
>
> ConnectStr = "ODBC;DSN=DSN名;UID=ACCESS01;PWD=ACCESS01;"
>
> SQL = "SELECT MAIN_CODE,SYS_CODE FROM TABLE1 WHERE MAIN_CODE ='001
>'", '%');"
>  Set DB = CurrentDb()
> Set qdf = DB.CreateQueryDef("")
> 
> With qdf
>  .Connect = ConnectStr
>  .SQL = SQL
>  .ReturnsRecords = True
>  Set rs = .OpenRecordset
>    ↑このレコードセットをACCESS上のテーブルにそのまま
>     INSERTしたい. 
>End With
> 
>End Sub
ここではどちらのテーブル読んでるのでしょう?オラクル?

>
>
>レコードセットをそのままテーブルにINSERTするにはどのように
>ADDNEWメソッドを記述すればよいかが分かりません。
>大変申し訳ありませんが、ご教示願いたいと思います。
>
>例えば、”T01"という既存のテーブルにINSERTするつもりです。
>テーブル名"T01"
>項目(MAIN_CODE,SYS_CODE)
>
>Dim Mydb As Database
> 
>Do While Not dynOra.EOF
「dynOra」はどこで作ってるのか不明ですが、これがAccessのダイナセットかな?・・
とにかく、insert intoでレコードを挿入する場合の一般論ですが、VALUESに値を列挙すればいいのではないですか?

>  Mydb.Execute "insert into T01" & _
>     "(MAIN_CODE,SYS_CODE)" & _
こんな感じでどうですか?
>     " VALUES " & _
      "(" & rs("MAIN_CODE") & ", " & rs("SYS_CODE") ");"
>  dynOra.MoveNext
>  Loop
dynOraをLoopしている意味をよく理解していませんので、はずしているかもしれませんが・・
上記のモジュールでとったレコード(MAIN_CODE ='001%'のオラクルのレコード)をすべて、MydbのT01テーブルにインサートするのであれば・・

Do While Not rs.EOF
  Mydb.Execute "insert into T01" & _
     "(MAIN_CODE,SYS_CODE)" & _
     " VALUES " & _
      "(" & rs("MAIN_CODE") & ", " & rs("SYS_CODE") ");"
  rs.MoveNext
Loop

でいいのではないですか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 96