2011/08/02

access2010 Webデータベース その75 処理途中で接続が切れたら..

そういえば、ちゃんと確認していなかったなと。
Webデータベースだけということではなくて、SharePointリストリンクテーブルのレプリケーションについて。SharePointリストとの同期はAccessの中の人が組み込みの処理で実行してくれるのからお任せの方向でよいのだけど、処理途中でサーバへの接続が切れてしまったらどうなるのだろうということ。
Accessのオプション→カレントデータベースにこのようなプロパティがある。各々の効果についてはやってみれば明白だからよいとして、SharePointリストのリンクテーブルはキャッシュが肝になっている。これがなかなか高速で、以前のバージョンに比べると使用するのにあまり抵抗感がなくなってきていると思う。まぁこれはいいか。
そこで、クライアントサイド(DAO)とサーバサイド(Named DataMacro)でレコード(SharePointアイテム)を追加していくとき、接続が切れたらどうなるのかを見ておく。

Sub test01()
On Error GoTo ErrHnd
    Dim dbs As Database, rs As Recordset, i As Long
    Set dbs = CurrentDb
    Set rs = dbs.OpenRecordset("table02")
    For i = 1 To 30
        rs.AddNew
        rs!F01 = i
        rs.Update
    Next
Done:
    Set dbs = Nothing: Set rs = Nothing
    Exit Sub
ErrHnd:
    MsgBox Err.Number & Error$
    Resume Done
End Sub

Sub test02()
    Dim i As Long
    For i = 1 To 10
        DoCmd.SetParameter "param01", i
        DoCmd.RunDataMacro "table02.InsertRecord"
    Next
Done:
    Exit Sub
ErrHnd:
    MsgBox Err.Number & Error$
    Resume Done
End Sub
<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application">
  <DataMacro Name="InsertRecord">
    <Parameters>
      <Parameter Name="param01" />
    </Parameters>
    <Statements>
      <CreateRecord>
        <Data>
          <Reference>table02</Reference>
        </Data>
        <Statements>
          <Action Name="SetField">
            <Argument Name="Field">table02.F01</Argument>
            <Argument Name="Value">[param01]</Argument>
          </Action>
        </Statements>
      </CreateRecord>
    </Statements>
  </DataMacro>
</DataMacros>
で、どうなるかというと、まずはDAOで。
切断以降でも、特にエラーも発生せず、コードはすべて実行される。きっとCRUDはキャッシュに対して実行されているのだろうな。で、レコードごとに同期されていくと。
保留となった情報は記録される。
接続が回復するとメッセージバーが出現し同期についての指示を行う。保留中の情報を破棄することも可能。
データマクロ(サーバサイドので処理)の場合、
 切断された以降で実行時エラーになる。それまでに実行された分は処理されている。

0 件のコメント: