ラベル データマクロ の投稿を表示しています。 すべての投稿を表示
ラベル データマクロ の投稿を表示しています。 すべての投稿を表示

2013/04/12

Office 365 Access アプリ -18- データマクロ エラーの生成

エラーの生成 / RaiseError マクロ アクション を確認してみる。


  エラーの説明 / Error Description のみを引数として、データ マクロ で UI にメッセージを表示させる唯一の方法なのである。SQL Azure上ストアドプロシージャに変換される内容は、
TRY ブロック内で、THROW 50000, N'エラーがスローされます', 1 となる。実行後、CATCH ブロックに移り、マクロトレースなどに関する処理を終え、再スローされる。例外をスローだな。なんかへんだなと思ってた
  ただ、使用については気を付けておくことがある。

2013/04/01

Office 365 Access アプリ -16- データマクロ レコードを挿入する

データマクロで新規レコードを挿入する。ちょっと小細工。


  データマクロでテーブルにレコードを挿入する場合、レコードの作成/CreateRecord データブロックで追加すればよい。だけど、ユニークインデックスであるとかの理由によって挿入できない時がある。

盛大にアラートが出る。
  あらかじめ想定できることは対処しておく。


2013/03/25

Office 365 Access アプリ -13- データマクロ レコードロック

レコードのロックについて勉強してみた。さて、あってるのかどうか。


  レコードごと/ForEachRecord データブロックで確認する。
BEGIN TRAN

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

DECLARE _dm_cur1 CURSOR LOCAL STATIC FOR
 SELECT
  [F_text]
 FROM
  [Table1]
 
 WHERE [Table1].[ID] = 1
 --ORDER BY [ID] ASC

OPEN _dm_cur1
CLOSE _dm_cur1
DEALLOCATE _dm_cur1

SET TRANSACTION ISOLATION LEVEL READ COMMITTED
--- ここまで実行して確認

ROLLBACK TRAN
  こんな感じのものをSSMSで実行しながら確認。データ マクロがストアド プロシージャに変換されたものを簡略化した。

2013/03/24

Office 365 Access アプリ -12- データマクロ トレース

データ マクロのデバッグとかにトレースを見る。詳細までは見れないけれど。

データ マクロ実行の経過や結果をトレースで確認することができる。


  "データ マクロのトレース/Data Macro Tracing"がOnになっていると、データ マクロ実行時の経過が記録されていく。変換されたストアド プロシージャにロジックが組み込まれているのでこれ以上の操作をすることはない。"トレース テーブルの表示/View Trace Table"押下でテーブルが表示される。ただし、ブラウザで。


  軽い内容であればこれで充分なのだけど、ログが多くなったりデータマクロを動作させるためのUIを用意したりと以外に面倒な時がある。

2013/03/23

Office 365 Access アプリ -11- レコードの作成 データ ブロック

テーブルに 1レコード追加する簡単なお仕事。

  当たり前だけれども、レコードの作成先であるテーブル指定は必須です。そして、クエリは指定できない。

  無論、フィールドの設定/SetField アクションが必須。全フィールド分が必要ということではない。

Office 365 Access アプリ -10- レコードの参照 データ ブロック

翻訳されると意味が少し通じなくなる。

Look Up "A" Record なのである。
  参照するレコードが複数である場合、その先頭レコードが参照される。なんにしても 1レコードだけ参照される。レコードごと/ForEachRecord データ ブロックとの違いはこの点にある。


  同じく参照するレコードが存在しない場合、データ ブロック内のデータ アクションなどは実行されない。

Office 365 Access アプリ -9- レコードごと データ ブロック

ForEachRcord そのまんま"レコードごと"。テーブルもしくはクエリから参照したレコードを順次処理を行う。

  レコードごと/ForEachRecord データ ブロック内でいくつかのデータ ブロックやデータ アクションを使用することができるのだけど、例えばレコードの編集/EditRecord データブロックを使用した場合、参照されているすべてのレコードに対しフィールドの編集を行うことができる。レコードの削除/DeleteRecord アクションを使用した場合、すべてのレコードを削除することになる。当然 If プログラム フローなどでフィールドの値を判定しながら処理することもできる。

2013/03/20

Office 365 Access アプリ -8- データマクロ

必要なければ、それはそれでよいのだけど。それよりも重大な問題は、この投稿の時点でオンラインヘルプに間違いが多すぎること。Access 2010 に関する内容になっていて、Access アプリ向けではないのである。

  テーブルを定義していくだけで最低限の機能を持ったビューが作成されるのだから、要件を満たすならそれでいい。アプリケーションらしいものにする上で必需になるんだろうなと。

  レコードが編集可能なビュー上での操作やビューのレコードソース以外からの参照などについてはデータマクロを使うことになろうかと思う。定義域関数の代わりになるものとかも含まれる。

2011/09/09

access2010 遅いのではないのか? -10-

データマクロが遅いと思っていたけど、顕著な例がやっと。
こんなテーブルがあったとして、
累計を更新するみたいな重い処理をデータマクロを実行すると、実行のたび顕著に遅くなっていく。

2011/06/13

access2010 データマクロで祝日を列挙

VBAで扱えばよいのだけど、Webデータベースでも使えるようにしてみたいなと。公開されているVBAコードをデータマクロに移植した。
使い方などまだ考えていないからとりあえず該当月の祝日を出力してもらう。
Office365上で実行すると1秒弱かかっているから、WebフォームのUIマクロかWebマクロで実行できるかどうかも検討してみよう。
以降、ざっくり検証しかしていないデータマクロのメモ(xml)

2011/05/17

access2010 Webデータベース その47 全角空白を半角に

** Office365beta(プランP1) 環境 **
全角スペースを半角スペースに変換したかったのだけど、WebデータベースではReplace関数を使用できない。

Replace関数がない
こればかりは仕様だから仕方がない。

2011/03/03

access2010 削除前データマクロ/削除後処理とフォームイベント

削除前データマクロでエラーを生成しマクロを中止とする場合、
form.Deleteイベントは発生する。
form.Deleteイベントで Cancel = True とした場合、
削除前データマクロは実行されない。
削除前データマクロで削除を中止した場合、
form.BeforeDelConfirmイベントとform.AfterDelConfirmイベントは発生しない。

Delete→削除前データマクロ→BeforeDelConfirm→AfterDelConfirm

削除後処理が微妙なタイミングで実行されている模様。ミリ秒単位でしかみてないけど、削除されるときでBeforeDelConfirm以前。

2011/03/02

access2010 フォームエラーイベントと変更前データマクロ

Private Sub Form_Error(DataErr As Integer, Response As Integer)
    Response = acDataErrContinue '既定アラート抑止
    Select Case DataErr
        Case 2113 '書式に適さなかった
            MsgBox ActiveControl.Name & "は、○○です。", , "入力"
        Case 2279 'InputMaskに違反
            ActiveControl.Undo
        Case 2107 '入力規則に違反
            MsgBox ActiveControl.Name & "は、○○です。", , "入力規則違反"
        Case 3314 '値要求
            MsgBox ActiveControl.Name & "は、○○です。", , "入力必須"
        Case 3939 '変更前データマクロでのエラー
            Response = acDataErrDisplay
        Case Else
            Response = acDataErrDisplay
    End Select
End Sub

2010/11/19

access2010 データマクロでテーブルを読み取り専用にする

BackEndのデータマクロ(1)

BackEndのデータマクロ(2)

'FrontEnd
Function IsTableReadOnly() As Boolean
    IsTableReadOnly = False
End Function
FE/BE等の構成で、共通のユーザ定義関数を使用した。FEからの接続の場合、CRUDすべて可能で、直接BEをアクセスしていたり、IsTableReadOnlyを定義していないFEから接続するとエラーで戻ってくる。ADOだろうがDAOだろうとも。

2010/09/17

access2010 DoCmd.SetParameter

DoCmd.SetParameter メソッド
VBAで使うときちょっと癖があるので。

'Module:DoCmdR
Option Compare Database
Option Explicit

Public Sub SetParameter(ParameterName As String, _
                        ParameterValue As Variant)
    Dim tmpParam As Variant

    Select Case VarType(ParameterValue)
        Case 7 'vbDate
            tmpParam = Format(ParameterValue, _
                              "\#mm/dd/yyyy hh:nn:ss\#")
        Case 8 'vbString
            tmpParam = Chr(34) & _
                       Replace(ParameterValue, _
                               Chr(34), String(2, 34), , , _
                               vbBinaryCompare) & _
                       Chr(34)
        Case Else
            tmpParam = ParameterValue
    End Select
    DoCmd.SetParameter ParameterName, tmpParam
End Sub
'使用例
Option Compare Database
Option Explicit

Private Sub cmd01_Click()
    DoCmdR.SetParameter "parameter_name", Me.txt01
    DoCmd.OpenQuery "Query_Name"
End Sub
PARAMETERS param01 Value;
SELECT T_0.ID, T_0.F_Num, T_0.F_txt, T_0.F_date, T_0.F_boolean
FROM T_0
WHERE T_0.F_date=param01;
BrowseTo/OpenForm/OpenQuery/OpenReport/RunDataMacroが実行されるとパラメータコレクションはすべてクリアになるから、使用する直前にメソッドを使用する。

2010/09/09

access2010 データマクロでログとか

まぁログを取ってみようかと。
IsInsertプロパティで分岐して、TimeStampをふたつ、変更前テーブルイベントBefore_Changeで。
で、各テーブルイベントでログテーブルにレコードの作成データブロックで追加。
名前付きデータマクロでちょこっとおまとめ
名前付きデータマクロならVBAから呼び出せもする。
IntelliSense使えるのは便利でいいやね

2010/08/25

access2010 データマクロ


データマクロのパラメータ
レコードの参照
レコードの作成
ReturnVarsコレクション
LastCreateRecordIdentity
データマクロの実行

2010/08/05

access2010 データマクロの存在確認

コードで存在を確認するすべがないかな?と思ったらあった。
Sub FuncDataMacro()
    Dim cn As ADODB.Connection, rs As New ADODB.Recordset
    
    Set cn = CurrentProject.Connection
    
    rs.CursorLocation = adUseClient
    rs.Open "select LvExtra from MSysObjects where Name='テーブル1'", cn
    
    Debug.Print rs(0)
    
    rs.Close: Set rs = Nothing
    Set cn = Nothing
End Sub
ここでデータマクロ編集するつもりはないけど。

2010/07/20

access2010 LastCreateRecordIdentity


とヘルプになっているけど、このように出来ないわけで。
と、なっているからこっちが正しいのだろうと。
Webテーブルの場合、ID:オートナンバーが自動で組まれるから、WebテーブルでLastCreateRecordIdentityはIDを取得することになる。
クライアントテーブルの場合、プライマリキーが取得できる模様。

2010/05/13

access2010 データマクロ BeforeChange時検証

フィールドの入力規則→検証で、以前より便利にはなってはいるけれども、どうせならデータマクロでやってみるかと。
式ビルダとかにでてこないからデータマクロで使えなさそうな関数があるんだけど、実際のところ認識し使用はできる。Webに対応してないってことが要因と思われ、クライアントアプリとしては稼働する状態

Sub test()
On Error GoTo ErrLbl
    Dim cn As New ADODB.Connection
    Set cn = Application.CurrentProject.Connection

    cn.Execute "insert into t_02 (F_txt,F_num,F_datetime) values ('',null,#2009/12/31#)"
Done:
    cn.Close
    Set cn = Nothing
Exit Sub
ErrLbl:
    MsgBox "ADOでInsert" & vbCrLf & Err.Description, vbExclamation
    Resume Done
End Sub
ADOで操作してメッセージだせなくはない。
外部からODBC接続した場合
リンクテーブル状態