Microsoft Access and SQL Azure Information Center for Developers
んー、こんなものがあったのね。
さっそく試してみた。思いのほかレスポンスがいいなという感想。
SQL Azureとクライアント間はセキュリティ接続だっけか?が必須だからman in the middleはないだろうということと、Azure側でのIPフィルタリングとか施すんだろうな、たぶん。
2011/02/26
2011/02/22
PCの消費電力はどんだけだ。鼻毛鯖ってよ。
自宅の引越を機会にワットチェッカーなるものを買ってみた。だって新居が20Aっていうんだもの。30Aの契約に変えましたけど。
買ってから動作テストしかしてなかったいわゆる鼻毛鯖をi7-860に換装しまして、VGAはHD5750を追加/メモリは2Gを4枚/intelなSSDを2枚/日立1TなHDDを1枚てな構成。モニタU2410を2枚を含めて確認。
何もしてないときであれば200W程度だった。エンコードなどさせたときは300W。ゲームなどはしないから鼻毛鯖の電源でもよさそうだったけど、結局650W電源に換装。 モニタの明るさはかなり落としてるからモニタ分の消費電力は低く抑えられていると思う。
DDR3-4Gって安くなってるし、今思うとタイプSDをお嫁に出して鼻毛をもう一台買っておくべきだったな。チップセットの一件が落ち着いたらSDを改造しちゃうか。
買ってから動作テストしかしてなかったいわゆる鼻毛鯖をi7-860に換装しまして、VGAはHD5750を追加/メモリは2Gを4枚/intelなSSDを2枚/日立1TなHDDを1枚てな構成。モニタU2410を2枚を含めて確認。
何もしてないときであれば200W程度だった。エンコードなどさせたときは300W。ゲームなどはしないから鼻毛鯖の電源でもよさそうだったけど、結局650W電源に換装。 モニタの明るさはかなり落としてるからモニタ分の消費電力は低く抑えられていると思う。
DDR3-4Gって安くなってるし、今思うとタイプSDをお嫁に出して鼻毛をもう一台買っておくべきだったな。チップセットの一件が落ち着いたらSDを改造しちゃうか。
2011/02/15
2011/02/14
access2010 Kiosk Form
Option Compare Database Option Explicit Public Const HWND_TOP = 0 Public Const HWND_BOTTOM = 1 Public Const HWND_TOPMOST = -1 Public Const HWND_NOTOPMOST = -2 Public Const SW_SHOW = 5 Public Const SW_HIDE = 0 Public Const SWP_NOSIZE = &H1 Public Const SWP_NOMOVE = &H2 Public Const SWP_SHOWWINDOW = &H40 Public Const SW_MAXIMIZE = 3 Declare PtrSafe Function SetWindowPos Lib "user32" _ (ByVal Hwnd As LongPtr, _ ByVal hWndInsertAfter As LongPtr, _ ByVal x As Long, _ ByVal y As Long, _ ByVal cx As Long, _ ByVal cy As Long, _ ByVal wFlags As Long _ ) As Long Declare PtrSafe Function ShowWindow Lib "user32" _ (ByVal Hwnd As LongPtr, _ ByVal nCmdShow As Long _ ) As Long
Option Compare Database Option Explicit '境界線スタイル:なし、スクロールバーとかは非表示にしておく Private Sub Form_Close() ShowWindow Application.hWndAccessApp, SW_SHOW End Sub Private Sub Form_Load() If Not Me.PopUp Then Exit Sub ShowWindow Application.hWndAccessApp, SW_HIDE ShowWindow Me.Hwnd, SW_MAXIMIZE End Sub Private Sub cmdClose_Click() DoCmd.Close End Sub Private Sub コマンド2_Click() DoCmd.OpenForm "フォーム2" End Sub
Private Sub Form_Load() If Not Me.PopUp Then Exit Sub SetWindowPos Me.Hwnd, HWND_TOPMOST, 0, 0, _ 0, 0, SWP_NOSIZE Or SWP_NOMOVE Or SWP_SHOWWINDOW End Subこれでいいか?なんの考慮もしてない。Alt+Tabなど抑制はしない。これ以降はお好みでどうぞ。 なんの考えもなくコード書くもんじゃないと悟った夜。
ラベル:
access 2010,
API
access2010 IAccessible.accStateプロパティ(oleacc)
accStateプロパティを参照して、リボンが最小化されているか調べる。
また、リボンの最小化を実行する。
また、リボンの最小化を実行する。
Option Compare Database Option Explicit Const CHILDID_SELF = 0& Const OBJID_CLIENT = &HFFFFFFFC Const ROLE_SYSTEM_PUSHBUTTON = &H2B Declare PtrSafe Function AccessibleChildren Lib "oleacc" ( _ ByVal paccContainer As IAccessible, _ ByVal iChildStart As Long, _ ByVal cChildren As Long, _ ByRef rgvarChildren As Any, _ ByRef pcObtained As Long _ ) As Long Declare PtrSafe Function AccessibleObjectFromWindow Lib "oleacc" ( _ ByVal hWnd As LongPtr, _ ByVal dwId As Long, _ riid As Any, _ ByRef ppvObject As IAccessible _ ) As Long Declare PtrSafe Function IIDFromString Lib "ole32" ( _ ByVal lpsz As LongPtr, _ lpiid As Any _ ) As Long Declare PtrSafe Function FindWindowEx Lib "user32" _ Alias "FindWindowExA" ( _ ByVal hWnd1 As LongPtr, _ ByVal hWnd2 As LongPtr, _ ByVal lpsz1 As String, _ ByVal lpsz2 As String _ ) As LongPtr 'リボンが最小化されているかどうか Function IsRibbonMinimize() As Boolean Dim IID(0 To 3) As Long, acc As IAccessible, targetAcc As IAccessible IIDFromString StrPtr("{618736E0-3C3D-11CF-810C-00AA00389B71}"), _ IID(0) AccessibleObjectFromWindow getHwnd, _ OBJID_CLIENT, _ IID(0), _ acc Set targetAcc = GetAcc(acc, "リボンの最小化", ROLE_SYSTEM_PUSHBUTTON) Select Case targetAcc.accState(CHILDID_SELF) Case 1048576 IsRibbonMinimize = False Case 1048584 IsRibbonMinimize = True End Select End Function 'リボンを最小化する Sub RibbonMinimize() Dim IID(0 To 3) As Long, acc As IAccessible, targetAcc As IAccessible IIDFromString StrPtr("{618736E0-3C3D-11CF-810C-00AA00389B71}"), _ IID(0) AccessibleObjectFromWindow getHwnd, _ OBJID_CLIENT, _ IID(0), _ acc Set targetAcc = GetAcc(acc, "リボンの最小化", ROLE_SYSTEM_PUSHBUTTON) If targetAcc.accState(CHILDID_SELF) = 1048576 Then targetAcc.accDoDefaultAction CHILDID_SELF End If End Sub Function getHwnd() As LongPtr Dim pHwnd As LongPtr pHwnd = FindWindowEx(hWndAccessApp, 0, "MsoCommandBarDock", "MsoDockTop") pHwnd = FindWindowEx(pHwnd, 0, "MsoCommandBar", "Ribbon") pHwnd = FindWindowEx(pHwnd, 0, "MsoWorkPane", "Ribbon") pHwnd = FindWindowEx(pHwnd, 0, "NUIPane", "") pHwnd = FindWindowEx(pHwnd, 0, "NetUIHWND", "") getHwnd = pHwnd End Function '**** 引用 http://www.ka-net.org/ **** Function GetAcc(myAcc As IAccessible, _ myAccName As String, _ myAccRole As Long _ ) As IAccessible Dim ReturnAcc As IAccessible Dim ChildAcc As IAccessible Dim List() As Variant Dim Count As Long Dim i As Long If (myAcc.accState(CHILDID_SELF) <> 32769) And _ (myAcc.accName(CHILDID_SELF) = myAccName) And _ (myAcc.accRole(CHILDID_SELF) = myAccRole) Then Set ReturnAcc = myAcc Else Count = myAcc.accChildCount If Count > 0& Then ReDim List(Count - 1&) If AccessibleChildren(myAcc, 0&, ByVal Count, List(0), Count) = 0& Then For i = LBound(List) To UBound(List) If TypeOf List(i) Is IAccessible Then Set ChildAcc = List(i) Set ReturnAcc = GetAcc(ChildAcc, myAccName, myAccRole) If Not ReturnAcc Is Nothing Then Exit For End If Next End If End If End If Set GetAcc = ReturnAcc End Function
ラベル:
access 2010,
API
access2010 IAccessible.accLocationメソッド(oleacc)
Option Compare Database Option Explicit Const CHILDID_SELF = 0& Declare PtrSafe Function AccessibleObjectFromWindow Lib "oleacc" ( _ ByVal hWnd As LongPtr, _ ByVal dwId As Long, _ riid As Any, _ ByRef ppvObject As IAccessible _ ) As Long Declare PtrSafe Function IIDFromString Lib "ole32" ( _ ByVal lpsz As LongPtr, _ lpiid As Any _ ) As Long Declare PtrSafe Function FindWindowEx Lib "user32" _ Alias "FindWindowExA" ( _ ByVal hWnd1 As LongPtr, _ ByVal hWnd2 As LongPtr, _ ByVal lpsz1 As String, _ ByVal lpsz2 As String _ ) As LongPtr Function ODocTabsHwnd() As LongPtr Dim pHwnd As LongPtr pHwnd = FindWindowEx(Application.hWndAccessApp, _ 0, _ vbNullString, _ "ODocTabs") pHwnd = FindWindowEx(pHwnd, _ 0, _ "NetUIHWND", _ vbNullString) ODocTabsHwnd = pHwnd End Function Sub DocumentTabsPos() Dim IID(0 To 3) As Long, acc As IAccessible Dim xLeft As Long, yTop As Long, _ xWidth As Long, yHeight As Long IIDFromString StrPtr("{618736E0-3C3D-11CF-810C-00AA00389B71}"), _ IID(0) AccessibleObjectFromWindow ODocTabsHwnd, _ CHILDID_SELF, _ IID(0), _ acc acc.accLocation xLeft, yTop, xWidth, yHeight Debug.Print xLeft, yTop, xWidth, yHeight End Sub
ラベル:
access 2010,
API
2011/02/11
access2010 “閉じる”をできるだけ検知
閉じるということをできるだけ検知してみようとしている。
基本的にフォームだけなのだけど、PopUpの時もしくはカスケード表示の時のフォーム上のシステムメニュー(っていうでしたっけ、フォームアイコン右クリメニュー)は検知できていない。
以下コードは64bit用。
基本的にフォームだけなのだけど、PopUpの時もしくはカスケード表示の時のフォーム上のシステムメニュー(っていうでしたっけ、フォームアイコン右クリメニュー)は検知できていない。
以下コードは64bit用。
2011/02/10
access2010 access2007 更新前処理イベント内で閉じるボタンのクリックを判定する方法
YU-TANGさんところの
更新前処理イベント内で閉じるボタンのクリックを判定する方法
をaccess2010でやってみた。
タブ付きドキュメントである場合の件。とりあえず動作することは確認できた。
64bitも動作するようになった。座標をLongLongで渡して成功。そして、デレクティブ。
でも、考えないといけないこと、たくさんあるな。どうしようかな。いずれにせよ、とりあえず。
いろいろ継ぎはぎしてみてBackstageとかOfficemenuもRibbonXmlで一応握ってみたと。
んー、やっぱりとりあえずレベル。たまに失敗している気配はしている。検証甘いから、何も考えずに実装するするにはちょっと心もとない。Accessibleを使うっつーところだけがポイントだろうか。
更新前処理イベント内で閉じるボタンのクリックを判定する方法
をaccess2010でやってみた。
タブ付きドキュメントである場合の件。とりあえず動作することは確認できた。
Option Compare Database Option Explicit '************************* '参照設定 'oleacc.dll '************************* Const ROLE_SYSTEM_LIST = &H21 Const ROLE_SYSTEM_PUSHBUTTON = &H2B Const ROLE_SYSTEM_BUTTONMENU = &H39 Const ROLE_SYSTEM_PROPERTYPAGE = &H26 Const ROLE_SYSTEM_MENUITEM = &HC Const ROLE_SYSTEM_CLIENT = &HA Private IsRibbonAction As Boolean Type POINTAPI X As Long Y As Long End Type #If VBA7 Then Private Declare PtrSafe Sub CopyMemory Lib "kernel32" _ Alias "RtlMoveMemory" ( _ Destination As Any, _ Source As Any, _ ByVal Length As LongPtr) Private Declare PtrSafe Function GetCursorPos Lib "user32" ( _ lpPoint As POINTAPI _ ) As Long #If Win64 Then Private Declare PtrSafe Function AccessibleObjectFromPoint Lib "oleacc" ( _ ByVal llXY As LongLong, _ ByRef ppvObject As Any, _ ByRef pvarChild As Variant _ ) As Long Private Function PointToLongLong(point As POINTAPI) As LongLong Dim ll As LongLong, cbLongLong As LongPtr cbLongLong = LenB(ll) If LenB(point) = cbLongLong Then CopyMemory ll, point, cbLongLong End If PointToLongLong = ll End Function #Else Private Declare PtrSafe Function AccessibleObjectFromPoint Lib "oleacc" ( _ ByVal xScreen As Long, _ ByVal yScreen As Long, _ ByRef ppvObject As Any, _ ByRef pvarChild As Variant _ ) As Long #End If #Else Private Declare Function GetCursorPos Lib "user32" ( _ lpPoint As POINTAPI _ ) As Long Private Declare Function AccessibleObjectFromPoint Lib "oleacc" ( _ ByVal xScreen As Long, _ ByVal yScreen As Long, _ ByRef ppvObject As Any, _ ByRef pvarChild As Variant _ ) As Long #End If Function IsCloseButtonClicked() As Boolean Dim xy As POINTAPI, acc As IAccessible Dim Child As Variant, btnName As String, tabCaption As String If IsRibbonAction Then IsCloseButtonClicked = True IsRibbonAction = False Exit Function End If GetCursorPos xy #If Win64 Then AccessibleObjectFromPoint PointToLongLong(xy), acc, Child #Else AccessibleObjectFromPoint xy.X, xy.Y, acc, Child #End If If acc Is Nothing Then IsCloseButtonClicked = False Exit Function End If btnName = acc.accName(Child) tabCaption = CodeContextObject.Caption If tabCaption = "" Then tabCaption = CodeContextObject.Name End If Select Case acc.accRole(Child) Case ROLE_SYSTEM_LIST MsgBox "タスクバー:すべてのウィンドウを閉じる" & _ vbCrLf & btnName Case ROLE_SYSTEM_PUSHBUTTON If InStr(1, btnName, "を閉じる") > 1 Then MsgBox "フォーム閉じるボタン" & _ vbCrLf & btnName Else MsgBox "Application閉じるボタン" & _ vbCrLf & btnName End If Case ROLE_SYSTEM_BUTTONMENU MsgBox "システムメニュー:閉じる" & _ vbCrLf & btnName Case ROLE_SYSTEM_MENUITEM MsgBox "フォームアイコンダブルクリック" & _ vbCrLf & btnName Case ROLE_SYSTEM_PROPERTYPAGE '結果的にこうなる MsgBox "Applicationアイコンダブルクリック" & _ vbCrLf & btnName Case Else MsgBox "不明 もしくは、Backstageのコマンド" & _ vbCrLf & btnName End Select IsCloseButtonClicked = True End Function 'RibbonXmlで検知:フォームが開いていること前提 Sub onActionClose(ctr As Object, CancelDefault) If Screen.ActiveForm.Dirty Then MsgBox "RibbonXmlで管理できるコマンド:" & ctr.ID IsRibbonAction = True End If CancelDefault = False End Sub
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <commands> <command idMso="WindowClose" onAction="onActionClose" /> <command idMso="CloseDocument" onAction="onActionClose" /> <command idMso="FileCloseDatabase" onAction="onActionClose" /> <command idMso="FileExit" onAction="onActionClose" /> </commands> </customUI>a2007でも動作するけどOfficeメニューから閉じる動作については対応は今のところ放置。同様に、BackStageから閉じる場合も反応できない。この辺はリボンカスタマイズでなんとかなるかな。タスクバーから閉じる場合もダメなんす。 a2010Runtimeだけシステムメニューから閉じるの場合反応なし。a2010(x64)についてはからっきし動作しない。調査してみるけど、これは俺には無理かも。AccessibleObjectFromPoint にXYをどのように渡すかだろうか。
64bitも動作するようになった。座標をLongLongで渡して成功。そして、デレクティブ。
でも、考えないといけないこと、たくさんあるな。どうしようかな。いずれにせよ、とりあえず。
いろいろ継ぎはぎしてみてBackstageとかOfficemenuもRibbonXmlで一応握ってみたと。
んー、やっぱりとりあえずレベル。たまに失敗している気配はしている。検証甘いから、何も考えずに実装するするにはちょっと心もとない。Accessibleを使うっつーところだけがポイントだろうか。
ラベル:
access 2010,
API,
MS-Access
access2010 Undoメソッド/Undoイベント NavigationControl
Use code to "undo" things in Access
こんな時にUndoですよって話だと思うんだけど、何故、 移動コントロール(NavigationControl)もあるのって思う。まぁどうでもいい話だけど。
NavigationControlのメンバーにValueとかもあるんだけど使えるわけもなく、なんだかなぁ。
イベントも各種あるけど使いどころがわからないという。強制終了とか起きちゃうし。
ふと、1つのフォーム上にNavigationControlが複数存在させ、各々が個々に関連するサブフォームをもつナビゲーションフォームをコネタで試してみた。
できた。けど、BrowseTo使った時点でクラッシュした。 独立したナビゲーションフォームはフォーム上にひとつしか存在できないことが前提に作られているようだ。無理ですよっていうチラシの裏。
こんな時にUndoですよって話だと思うんだけど、何故、 移動コントロール(NavigationControl)もあるのって思う。まぁどうでもいい話だけど。
NavigationControlのメンバーにValueとかもあるんだけど使えるわけもなく、なんだかなぁ。
イベントも各種あるけど使いどころがわからないという。強制終了とか起きちゃうし。
ふと、1つのフォーム上にNavigationControlが複数存在させ、各々が個々に関連するサブフォームをもつナビゲーションフォームをコネタで試してみた。
できた。けど、BrowseTo使った時点でクラッシュした。 独立したナビゲーションフォームはフォーム上にひとつしか存在できないことが前提に作られているようだ。無理ですよっていうチラシの裏。
ラベル:
access 2010,
チラシの裏
2011/02/03
access2010 レポート/セクションのプロパティ
その1 セクション 改ページ/ForceNewPageプロパティ
以前のバージョンと挙動が違うのが1件
その2 レポート PageHeader/PageFooter/Picture/PictureAlignment/PicturePages/PictureTiling
以前のバージョンと挙動が違うのが1件
ACCESS 2010: Extra report page prints when Group Footer set to After Section
その2 レポート PageHeader/PageFooter/Picture/PictureAlignment/PicturePages/PictureTiling
ラベル:
access 2010,
メモ
2011/02/01
登録:
投稿 (Atom)