Date: Fri, 08 Jun 2007 23:05:33 +0900
From: 丸山 宏徳 <who@example.ne.jp>
お久しぶりです、丸山です。
> >(省略)
> >2007は、GUI以外でもかなり変更があるようですね。少し試してみたところ、
> >以下のような結果が出ました。
> ビュー表を使った場合の、レコード追加・更新では、注意が必要です。
> 追加、更新可能なビュー表かどうか、SQLレベルで確認してください。
このあたりは正直、断言は出来ませんが……。
> 通常のビュー表を使ったSQLレベルでは、
>
> >また、連結された1対多の1側のデータ(例:保護者.姓など)を変更した場
> >合でも、ちゃんと排他が掛かっています。他のクライアントで変更された場合、
>
> 1側テーブルの更新はできません。
> それを更新ができるようにしているのは、Access側の処理だと思います。
出来るんですよ、それが(^^;
テーブル構成は前のメールの通りです。以下はカット&ペーストして空白を整形
しただけの、そのまんまのビューのSQLです
SELECT
dbo.保護者生徒関係.生徒ID,
dbo.保護者生徒関係.保護者ID,
dbo.保護者生徒関係.関係ID,
dbo.保護者.姓 AS 保護者姓,
dbo.保護者.名 AS 保護者名
FROM
dbo.保護者生徒関係 LEFT OUTER JOIN dbo.保護者
ON dbo.保護者生徒関係.保護者ID = dbo.保護者.ID
このビューからウィザード(というか、例のリボンインターフェースから「作成」
→「フォーム」を選んで)で作っただけのフォームで、関係IDも保護者姓も保護
者名も修正できます。怖いコトに生徒IDも保護者IDも(既に存在しているIDにな
ら)修正できます(^^;
ちなみに、LEFT OUTER JOINをINNER JOINに修正しても(この部分に関しては)
特に変化はありませんでした
……既にあるIDに修正した場合どういう動作をするかというと……そうですね、
実際のデータを例に挙げましょう
【生徒】 ID,姓,名
1,丸山,太郎
2,丸山,次郎
3,堀川,花子
【保護者】 ID,姓,名
1,丸山,宏徳
2,堀川,明
3,堀川,奥様
【保護者生徒関係】 ID,生徒ID,保護者ID,関係ID
1,1,1,0
2,3,2,0
3,2,1,0
4,3,3,0
まぁ、とりあえず関係IDはダミーということで、こんなデータを想定します。上
記のビューでは次のような結果が得られます
1,1,0,丸山,宏徳
3,2,0,堀川,明
2,1,0,丸山,宏徳
3,3,0,堀川,奥様
で、このビューを元にウィザードでフォームを作ります。このフォームは(当然
ながら)「固有のプロパティ」も「再同期コマンド」も空白になっていますが、
全ての項目が修正可能です。
上記の結果の四行目にあたるレコードを表示しているときに
生徒ID=3(そのまま)
保護者ID=1
関係ID=1
保護者姓=朽木
保護者名=三郎
と修正すると、テーブルの内容は以下のようになります。
【生徒】 変化なし
【保護者】 ID,姓,名
1,朽木,三郎
2,堀川,明
3,堀川,奥様
【保護者生徒関係】 ID,生徒ID,保護者ID,関係ID
1,1,1,0
2,3,2,0
3,2,1,0
4,3,1,1
そして(流石にリアルタイムでは変化しませんが)「全てを更新」ボタンを押す
と、ちゃんとこの修正が反映されたデータがフォームにも表示されます。
丸山 宏徳(朽木 三郎)
E-Mail:who@example.ne.jp
[MSDE/SQLServerに関して、今、どんなことにお困りですか?] |
よろしければお困りの内容を、電子メールで教えて下さい。 |
質問を電子メールで作成する
|
[ウィンドを閉じる][MSDE/SQLServer FAQ ][MSDE / MSDE2000 技術サポート情報一覧]
|