2013/04/28

Office 365 Access アプリ -27- ビューの変更 マクロ アクション

Where 条件式の記述がすんなり頭に入らなかった。
ChangeView マクロ アクション (Access 2013 カスタム Web アプリ)

  ビュー名は当然なのだけど、テーブル名も必須なのである。"ビューの変更 / ChangeView" マクロ アクションでは、テーブルに紐づけられた"ビュー"のみ指定できる。ポップアップでのみ使用する独立したビューは指定することができない。
  テーブル(Table) / ビュー(View) / 並び替え(Order By) 引数は文字列、Where 引数のみ式引数になる。条件引数の記述がうまくいかないなぁということが多いかもしれない。



  条件引数は式引数だから、マクロ アクションが実行されるとき評価がされていくのだけど、同じフィールド名や変数名が使用されていたり、すでに存在している時など、どの値を採用するのか解析できないようなときにこのアラートは発生する。


  このような条件引数を記述した場合、うまくいくときとそうでないときがある。この条件引数の記述で意図したとおりになるのは、
  • レコードソースが指定されていないビューでマクロ アクションを実行している時
だけである。例えに [ID] を使用しているからあまりよくないのだけど、もし変数 [ID] というのが別に存在していた場合、アラートは発生する。

  アラートの内容から、
[テーブル名].[フィールド名]
 と、記述するように読めるのだけど、これは正確ではない。レコードソースがクエリである場合、クエリ名を使わないとならないから。
 [レコードソース名].[フィールド名]
というのが本来なのである。まぁ、多くの場合は、"テーブル名 = レコードソース" なんですけどね。
  クエリに 2つ以上のテーブルが含まれていて同じフィールド名が存在してしまう場合は、エイリアスで区別できるようにしておいた方がトラブルがなさそうだが、
[レコードソース名].[テーブル名.フィールド名]
でもできそうな感じ。

  では、"埋め込みクエリ"がレコードソースになっていた場合どうするのか。こうならないようにした方がよいのだけど、正確なクエリ名を指定すれば条件引数で使用することができる。正確なクエリ名はSSMSとかで探せばよい。GUIDが使用されている ビュー(SQLServer)のどれかがレコードソースに使用されているクエリ(SQLServerでいうところのビュー)である。

  このマクロ アクション以降に記述されたマクロ アクションは実行されないはず。

0 件のコメント: