インサートイントゥにレコードセットを使用するには?

解決


はづき  2003-03-07 16:55:42  No: 77347  IP: [192.*.*.*]

1・テーブルAの一部をレコードセットに取り込みます
2・テーブルAのデータを全てデリートします
3・テーブルB(フィールド名など構成は同じTEMPテーブル)のレコードを
    テーブルAに挿入します
4・1で取り込んだレコードセットの内容をテーブルAに挿入します
ということをやりたいのですが

STRSQLコマンド = "SELECT * FROM テーブルA WHERE 項目 LIKE '*当月*'"
Set rs当月バックアップ = DBデータベース.OpenRecordset(STRSQLコマンド, dbOpenSnapshot)
DBデータベース.Execute ("DELETE FROM テーブルA")
DBデータベース.Execute ("INSERT INTO テーブルA SELECT * FROM テーブルB")
DBデータベース.Execute ("INSERT INTO テーブルA SELECT ???????????????")

?????の部分にレコードセットを指定したいのですが可能でしょうか?
可能ならばご教授願います・・・

編集 削除
とろ  2003-03-07 17:05:18  No: 77348  IP: [192.*.*.*]

テーブルAから削除する意味が分かりませんが、
    DBデータベース.Execute ("INSERT INTO テーブルA SELECT * FROM テーブルB")
だけでいいんじゃないですか?

編集 削除
とろ  2003-03-07 17:08:09  No: 77349  IP: [192.*.*.*]

※ 上の訂正

削除するのに、条件が付いていましたね。
    DBデータベース.Execute ("DELETE FROM テーブルA WHERE 項目 NOT LIKE '*当月*'")
    DBデータベース.Execute ("INSERT INTO テーブルA SELECT * FROM テーブルB")
で良いのでは?

編集 削除
はづき  2003-03-07 17:32:31  No: 77350  IP: [192.*.*.*]

とろさんレスさんくす
確かにそれでできますね
ただメインとしてお聞きしたいのは
レコードセットオブジェクトを????の部分に指定できるかな?
ということなんです・・・
私の上記例の経緯はおかしいものがありますが・・・
その辺は無視ということで
変な質問ごめんなさい・・・

編集 削除
魔界の仮面弁士  2003-03-07 22:22:09  No: 77351  IP: [192.*.*.*]

> レコードセットオブジェクトを????の部分に指定できるかな?
> ということなんです・・・

OLE DB Providerの多くは、そのような動作はサポートしていないようです。
ただし、OLE DB Providerの中には、文中に他のレコードセット名を
指定できるものが無いわけでもありません。

有名どころでは、データシェイププロバイダ(Provider=MSDataShape)がそれです。
データシェイプの場合は、Recordsetオブジェクトの
  RS.Properties("Reshape Name").Value
が返す値を使って、それをレコードセットの別名として使うことで、
その名前を問い合わせ文の中に含める事ができます。


あるいは、(SQL文などの)問い合わせ文中に、他のレコードセットを
指定するという形ではなく、受信したデータをXMLのDOMDocumentや
ADOのStream等にパーシストしておき、それを使って、別テーブルへ
一括挿入できるような動作であれば、若干のプロバイダがサポートしているようです。

また、ADOではありませんが、Oracle Objects for OLEで使われるような、
バインド配列オブジェクトなどを使うことで、バッチ更新処理を
サポートしているようなミドルウェアもあります。

編集 削除
はづき  2003-03-11 10:05:54  No: 77352  IP: [192.*.*.*]

なるほどなるほど・・
ちゅことは生では難しいということですね

魔界の仮面弁士さん
とろさん
どうもありがとうございました

編集 削除