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

解決


はづき  2003-03-08 01:55:42  No: 77347

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-08 02:05:18  No: 77348

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


とろ  2003-03-08 02:08:09  No: 77349

※ 上の訂正

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


はづき  2003-03-08 02:32:31  No: 77350

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


魔界の仮面弁士  2003-03-08 07:22:09  No: 77351

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

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 19:05:54  No: 77352

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加