■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#7023-0
僕のSQL文のどこが間違っているのか教えてください
DB1はAccessで作成したものです。
2つのテーブル(TB1,TB2)のフィールド(TB1.FD1,TB2.ST1)があるとします。
この2つのフィールドが同一で、かつTB2.ST2のフィールドが'○'のものを抜き出します。
上記の抽出条件で抜き出されたレコードセットのTB2.ST3フィールドに日付を入れるステートメントです。
僕は以下のように書きました。

Dim DB     as Database
Dim RS     as Recordset
Dim sSQL   as String

sSQL = "SELECT * FROM TB1, TB2 WHERE TB1.FD1 = TB2.ST1 AND TB2.ST2='○'"
Set DB = DBEngine.Workspaces(0).OpenDatabase("C:\Documents\DB1.mdb)
Set RS = DB.OpenRecordset(sSQL,dbOpenDynaset)

Do Until RS.EOF
    RS.Edit
        RS!ST3 = sDate
    RS.Update
    RS.MoveNext
Loop

このようにして実行すると、RS.Editのところで必ず引っかかります。
エラーメッセージは"データベースまたはオブジェクトは読取専用であるため更新できません"です。
上記のSQLで条件が2つのテーブルにまたがらない場合は更新できます。
(例えば、sSQL = "SELECT * FROM TB1 WHERE TB1=11111"とした場合は更新可能です)
何が悪いのでしょうか?
教えてください。
#7028-0
RE#7023:僕のSQL文のどこが間違っているのか教えてください
2つ以上のテーブルを同時に更新することはできません。
この場合連結したテーブルに対して更新をかけているのでエラーになるのです。
MDBの場合はクエリーを作って、そのクエリーに対して更新をかければ可能だったと思うよ。
#7029-0
RE#7028:僕のSQL文のどこが間違っているのか教えてください
> 2つ以上のテーブルを同時に更新することはできません。
> この場合連結したテーブルに対して更新をかけているのでエラーになるのです。
> MDBの場合はクエリーを作って、そのクエリーに対して更新をかければ可能だったと思うよ。

お返事ありがとうございます。

更新するテーブルが2つ以上というのは、FROM句で2つ以上指定すると、
更新されるテーブルは1つだけでも駄目ということですか?
(僕の例でいうと更新されるテーブルはTD2)

ところでクエリーを作ってクエリーに対して更新する方法とはどういう方法ですか。
#7032-0
RE#7029:僕のSQL文のどこが間違っているのか教えてください
> 更新するテーブルが2つ以上というのは、FROM句で2つ以上指定すると、
> 更新されるテーブルは1つだけでも駄目ということですか?
> (僕の例でいうと更新されるテーブルはTD2)
ダメです。Editはダイナセットに対して行うので
結合して読込んだ時点で2つのテーブルです。

> ところでクエリーを作ってクエリーに対して更新する方法とはどういう方法ですか。
クエリーを知っていますか?
ここでいうクエリーとは、指定した条件でデータを1つまたは複数のテーブルから抽出したもので、
テーブルと同じように扱えます。
クエリー(今回の場合TB1とTB2を結合したもの。条件「ST2='○'」を含めてもOK)を登録すると
SELECT * FROM クエリー名 [WHERE ST2='○']
として持ってくることができます。

このためだけにクエリーを作るのがいやならSQLで更新すればOK(この方が楽かも...)
このページと関連する記事:
#8269-0複数のテーブルに対してのUPDATEの方法がわからないんですが・・2000-03-07(火) 14:27
#5246-1テーブルの追加1999-09-16(木) 10:46
#21365-0クエリー、トランザクションってなんですか?2001-06-16(土) 01:23
#43346-0テーブル連結クエリーの同一フィールド名の扱い2001-05-24(木) 08:30
#97-0日付で検索・抽出2001-06-04(月) 19:10
#4185-0seaver1999-11-17(水) 19:58
#20089-0クエリーのクエリー2001-04-06(金) 10:50
#10664-0VBではACCESS出来ることが出来るのでしょうか2000-05-17(水) 14:43
#559-0クエリーとテーブルの結合2001-08-29(水) 00:49
#20042-0クエリの実行2002-03-05(火) 14:45
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)