[pgsql-jp: 27053] Re: レコードセット作成後のUPDATEについて。(やや、長文です。)

takayoshi_tamura @ mail.ryoyu.co.jp takayoshi_tamura @ mail.ryoyu.co.jp
2002年 8月 16日 (金) 10:31:09 JST


田村@RKK北陸です。
こんにちは。

MSの専門教育受けてないのと、MS-Accessから離れてかなりになるので
いい加減と取られてもしょうがないんですが。

>メーリングリストに投稿する前に、問題の回避方法は自己解決したのですが、
>「なぜ」そうなるのか疑問に思う点が解決出来ないため、投稿させて頂きます。
>
>Access側より、キー項目を用いて特定行レコードの、レコードセットを作成し
>値を更新したのですが、PostgreSQL側に送られているUPDATE文では、
>キー項目により特定されたUPDATE文が実行されていませんでした。
>
>Dim rst As New ADODB.Recordset, str As String, nNextMode As Integer
>str = "SELECT A, B, C FROM hogehoge WHERE KEY=9939"
>rst.Open str, conn, adOpenDynamic, adLockOptimistic

理由は無いのですが、Accessの場合Recordsetオブジェクトは
一時的なViewを作成しているんではないかと思ったことがあります。
それが本当であればAccessはその時点で、"KEY=9939"を条件として
抽出された"A", "B", "C"のColumnしか見てませんと言うか見えてませんし、

> ●UPDATEトレース結果1
> -1行が特定されていない。(「KEY」の特定が、Where句に無い)-
> UPDATE hogehoge
> SET A='1'
> WHERE (A='0' AND B='0' AND C IS NULL )

と言う実行が正でも間違いではないでしょう。

>自分の考えでは、例1のレコードセット作成時に、特定の行に対するレコード
>セットを作っているので、そのレコードセットに対するUPDATEを掛けた段階で
>PostgreSQL側に渡されるUPDATE文に特定の行に対するUPDATE文が、
>吐かれて良いのでは?と思ったのですが、なぜ特定行が特定されない

これはかなり当たっていると私は思います。
その辺はMS-Access(とMS-SQLserver)がごにょごにょとやっているんではないかと。

ところで、このようにCodeで更新を掛けているのであれば、
最初からSQLをDocmd.RunSQL等で走らせたほうが便利だと思うのですが、
何故Recordset.Openされているのですか?

では。

**********************************************************
 菱友計算株式会社 IS部 システムサービスG
                  田村 貴良 (ttamura @ mail.ryoyu.co.jp)
                       TEL: 076-425-2666 FAX:076-425-4665
********** It's the only neat thing to do ! **************





pgsql-jp メーリングリストの案内