エラーの生成 / RaiseError マクロ アクション を確認してみる。
エラーの説明 / Error Description のみを引数として、データ マクロ で UI にメッセージを表示させる唯一の方法なのである。SQL Azure上ストアドプロシージャに変換される内容は、
TRY ブロック内で、THROW 50000, N'エラーがスローされます', 1 となる。実行後、CATCH ブロックに移り、マクロトレースなどに関する処理を終え、再スローされる。例外をスローだな。なんかへんだなと思ってた
ただ、使用については気を付けておくことがある。
2013/04/12
2013/04/01
Office 365 Access アプリ -16- データマクロ レコードを挿入する
データマクロで新規レコードを挿入する。ちょっと小細工。
データマクロでテーブルにレコードを挿入する場合、レコードの作成/CreateRecord データブロックで追加すればよい。だけど、ユニークインデックスであるとかの理由によって挿入できない時がある。
あらかじめ想定できることは対処しておく。
データマクロでテーブルにレコードを挿入する場合、レコードの作成/CreateRecord データブロックで追加すればよい。だけど、ユニークインデックスであるとかの理由によって挿入できない時がある。
| 盛大にアラートが出る。 |
ラベル:
Access 2013,
Access app,
Office 365,
Office365,
データマクロ
2013/03/25
Office 365 Access アプリ -13- データマクロ レコードロック
レコードのロックについて勉強してみた。さて、あってるのかどうか。
レコードごと/ForEachRecord データブロックで確認する。
レコードごと/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で実行しながら確認。データ マクロがストアド プロシージャに変換されたものを簡略化した。
ラベル:
Access 2013,
Access app,
Office 365,
Office365,
データマクロ
2013/03/24
Office 365 Access アプリ -12- データマクロ トレース
データ マクロのデバッグとかにトレースを見る。詳細までは見れないけれど。
データ マクロ実行の経過や結果をトレースで確認することができる。
"データ マクロのトレース/Data Macro Tracing"がOnになっていると、データ マクロ実行時の経過が記録されていく。変換されたストアド プロシージャにロジックが組み込まれているのでこれ以上の操作をすることはない。"トレース テーブルの表示/View Trace Table"押下でテーブルが表示される。ただし、ブラウザで。
軽い内容であればこれで充分なのだけど、ログが多くなったりデータマクロを動作させるためのUIを用意したりと以外に面倒な時がある。
データ マクロ実行の経過や結果をトレースで確認することができる。
"データ マクロのトレース/Data Macro Tracing"がOnになっていると、データ マクロ実行時の経過が記録されていく。変換されたストアド プロシージャにロジックが組み込まれているのでこれ以上の操作をすることはない。"トレース テーブルの表示/View Trace Table"押下でテーブルが表示される。ただし、ブラウザで。
軽い内容であればこれで充分なのだけど、ログが多くなったりデータマクロを動作させるためのUIを用意したりと以外に面倒な時がある。
ラベル:
Access 2013,
Access app,
Office 365,
Office365,
データマクロ
2013/03/23
Office 365 Access アプリ -11- レコードの作成 データ ブロック
テーブルに 1レコード追加する簡単なお仕事。
当たり前だけれども、レコードの作成先であるテーブル指定は必須です。そして、クエリは指定できない。
無論、フィールドの設定/SetField アクションが必須。全フィールド分が必要ということではない。
当たり前だけれども、レコードの作成先であるテーブル指定は必須です。そして、クエリは指定できない。
無論、フィールドの設定/SetField アクションが必須。全フィールド分が必要ということではない。
ラベル:
Access 2013,
Access app,
Office 365,
Office365,
データマクロ
Office 365 Access アプリ -10- レコードの参照 データ ブロック
翻訳されると意味が少し通じなくなる。
参照するレコードが複数である場合、その先頭レコードが参照される。なんにしても 1レコードだけ参照される。レコードごと/ForEachRecord データ ブロックとの違いはこの点にある。
同じく参照するレコードが存在しない場合、データ ブロック内のデータ アクションなどは実行されない。
![]() |
| Look Up "A" Record なのである。 |
同じく参照するレコードが存在しない場合、データ ブロック内のデータ アクションなどは実行されない。
ラベル:
Access 2013,
Access app,
Office 365,
Office365,
データマクロ
Office 365 Access アプリ -9- レコードごと データ ブロック
ForEachRcord そのまんま"レコードごと"。テーブルもしくはクエリから参照したレコードを順次処理を行う。
レコードごと/ForEachRecord データ ブロック内でいくつかのデータ ブロックやデータ アクションを使用することができるのだけど、例えばレコードの編集/EditRecord データブロックを使用した場合、参照されているすべてのレコードに対しフィールドの編集を行うことができる。レコードの削除/DeleteRecord アクションを使用した場合、すべてのレコードを削除することになる。当然 If プログラム フローなどでフィールドの値を判定しながら処理することもできる。
レコードごと/ForEachRecord データ ブロック内でいくつかのデータ ブロックやデータ アクションを使用することができるのだけど、例えばレコードの編集/EditRecord データブロックを使用した場合、参照されているすべてのレコードに対しフィールドの編集を行うことができる。レコードの削除/DeleteRecord アクションを使用した場合、すべてのレコードを削除することになる。当然 If プログラム フローなどでフィールドの値を判定しながら処理することもできる。
ラベル:
Access 2013,
Access app,
Office 365,
Office365,
データマクロ
2013/03/20
Office 365 Access アプリ -8- データマクロ
必要なければ、それはそれでよいのだけど。それよりも重大な問題は、この投稿の時点でオンラインヘルプに間違いが多すぎること。Access 2010 に関する内容になっていて、Access アプリ向けではないのである。
テーブルを定義していくだけで最低限の機能を持ったビューが作成されるのだから、要件を満たすならそれでいい。アプリケーションらしいものにする上で必需になるんだろうなと。
レコードが編集可能なビュー上での操作やビューのレコードソース以外からの参照などについてはデータマクロを使うことになろうかと思う。定義域関数の代わりになるものとかも含まれる。
テーブルを定義していくだけで最低限の機能を持ったビューが作成されるのだから、要件を満たすならそれでいい。アプリケーションらしいものにする上で必需になるんだろうなと。
レコードが編集可能なビュー上での操作やビューのレコードソース以外からの参照などについてはデータマクロを使うことになろうかと思う。定義域関数の代わりになるものとかも含まれる。
ラベル:
Access 2013,
Access app,
Office 365,
Office365,
データマクロ
2011/09/09
2011/06/13
access2010 データマクロで祝日を列挙
VBAで扱えばよいのだけど、Webデータベースでも使えるようにしてみたいなと。公開されているVBAコードをデータマクロに移植した。
使い方などまだ考えていないからとりあえず該当月の祝日を出力してもらう。以降、ざっくり検証しかしていないデータマクロのメモ(xml)
Office365上で実行すると1秒弱かかっているから、WebフォームのUIマクロかWebマクロで実行できるかどうかも検討してみよう。
ラベル:
access 2010,
SharePoint 2010,
Webデータベース,
データマクロ
2011/05/17
access2010 Webデータベース その47 全角空白を半角に
** Office365beta(プランP1) 環境 **
全角スペースを半角スペースに変換したかったのだけど、WebデータベースではReplace関数を使用できない。
全角スペースを半角スペースに変換したかったのだけど、WebデータベースではReplace関数を使用できない。
| Replace関数がない |
こればかりは仕様だから仕方がない。
ラベル:
access 2010,
Office 365,
Office365,
SharePoint 2010,
Webデータベース,
データマクロ
2011/03/03
access2010 削除前データマクロ/削除後処理とフォームイベント
削除前データマクロでエラーを生成しマクロを中止とする場合、
form.Deleteイベントは発生する。
form.Deleteイベントで Cancel = True とした場合、
削除前データマクロは実行されない。
削除前データマクロで削除を中止した場合、
form.BeforeDelConfirmイベントとform.AfterDelConfirmイベントは発生しない。
Delete→削除前データマクロ→BeforeDelConfirm→AfterDelConfirm
削除後処理が微妙なタイミングで実行されている模様。ミリ秒単位でしかみてないけど、削除されるときでBeforeDelConfirm以前。
form.Deleteイベントは発生する。
form.Deleteイベントで Cancel = True とした場合、
削除前データマクロは実行されない。
削除前データマクロで削除を中止した場合、
form.BeforeDelConfirmイベントとform.AfterDelConfirmイベントは発生しない。
Delete→削除前データマクロ→BeforeDelConfirm→AfterDelConfirm
削除後処理が微妙なタイミングで実行されている模様。ミリ秒単位でしかみてないけど、削除されるときでBeforeDelConfirm以前。
ラベル:
access 2010,
データマクロ
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
ラベル:
access 2010,
データマクロ,
メモ
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だろうとも。
ラベル:
access 2010,
VBA,
データマクロ
2010/09/17
access2010 DoCmd.SetParameter
DoCmd.SetParameter メソッド
VBAで使うときちょっと癖があるので。
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が実行されるとパラメータコレクションはすべてクリアになるから、使用する直前にメソッドを使用する。
ラベル:
access 2010,
VBA,
データマクロ
2010/09/09
access2010 データマクロでログとか
まぁログを取ってみようかと。
IsInsertプロパティで分岐して、TimeStampをふたつ、変更前テーブルイベントBefore_Changeで。
で、各テーブルイベントでログテーブルにレコードの作成データブロックで追加。
名前付きデータマクロでちょこっとおまとめ
名前付きデータマクロならVBAから呼び出せもする。
IntelliSense使えるのは便利でいいやね
IsInsertプロパティで分岐して、TimeStampをふたつ、変更前テーブルイベントBefore_Changeで。
で、各テーブルイベントでログテーブルにレコードの作成データブロックで追加。
名前付きデータマクロでちょこっとおまとめ
名前付きデータマクロならVBAから呼び出せもする。
IntelliSense使えるのは便利でいいやね
ラベル:
access 2010,
データマクロ
2010/08/25
access2010 データマクロ
データマクロのパラメータ
レコードの参照
レコードの作成
ReturnVarsコレクション
LastCreateRecordIdentity
データマクロの実行
ラベル:
access 2010,
データマクロ
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
ここでデータマクロ編集するつもりはないけど。
ラベル:
access 2010,
データマクロ
2010/07/20
access2010 LastCreateRecordIdentity
とヘルプになっているけど、このように出来ないわけで。
と、なっているからこっちが正しいのだろうと。
Webテーブルの場合、ID:オートナンバーが自動で組まれるから、WebテーブルでLastCreateRecordIdentityはIDを取得することになる。
クライアントテーブルの場合、プライマリキーが取得できる模様。
ラベル:
access 2010,
データマクロ
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で操作してメッセージだせなくはない。
ラベル:
access 2010,
データマクロ
登録:
投稿 (Atom)






