2011/01/27

access2010 パラメータクエリを使ったフォームを開く

フォームのコントロールソースを、
PARAMETERS param01 Long;
SELECT table01.ID, table01.F01
FROM table01
WHERE (((table01.F01)>[param01]));
こんな感じにして、
<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<UserInterfaceMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application">
  <UserInterfaceMacro MinimumClientDesignVersion="14.0.0000.0000">
    <Statements>
      <Action Name="OpenForm">
        <Argument Name="FormName">form01</Argument>
        <Parameters>
          <Parameter Name="param01" Value="5"/>
        </Parameters>
      </Action>
    </Statements>
  </UserInterfaceMacro>
</UserInterfaceMacros>
<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<UserInterfaceMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application">
  <UserInterfaceMacro MinimumClientDesignVersion="14.0.0000.0000">
    <Statements>
      <Action Name="OpenForm">
        <Argument Name="FormName">form01</Argument>
        <Argument Name="View">Datasheet</Argument>
        <Parameters>
          <Parameter Name="param01" Value="5"/>
        </Parameters>
      </Action>
    </Statements>
  </UserInterfaceMacro>
</UserInterfaceMacros>
各々のマクロでフォームを開き、すべて更新を実行したとする。
フォームビューの場合、パラメータ値が適用され期待通りに更新できるのだが、データシートビューの場合、再度パラメータ値の問い合わせが発生する。パラメータを投入すると更新はされる。
パラメータ投入をキャンセル後再度すべての更新を実行すると、

 こんなことになると。
パラメータクエリをさっくり便利に使える機能だけにもったいないなと思うばかり。なぜデータシートビューだけこうなってしまうのだろうか。
分割フォームだとデータシートを上か左と下か右にした場合挙動がちょっと変わるけど、さらにダメな子になっちゃうね。

んと、不具合だそうです。そうだよねやっぱり。

対策1
データシートビューのフォームでは使用しない

対策2
レコードソースのWhere句にTempVarsコレクションを使用する。

0 件のコメント: