2010/05/30

access2010 CurrentDb.Properties メモ

nametypedefault
UseMDIModedbByte0
ShowDocumentTabsdbBooleanTrue
Theme Resource NamedbText
StartUpShowDBWindowdbBooleanTrue
StartUpShowStatusBardbBooleanTrue
AllowShortcutMenusdbBooleanTrue
AllowFullMenusdbBooleanTrue
AllowSpecialKeysdbBooleanTrue
AllowDatasheetSchemadbBooleanTrue
Auto CompactdbLong0
DesignWithDatadbBooleanTrue
Themed Form ControlsdbLong1
Show Navigation Pane Search BardbLong1
AllowBypassKeydbBoolean
Remove Personal InformationdbLong
CustomRibbonIDdbText
StartUpFormdbText

access2010 ランタイム その3

XPクライアント上でランタイム実行アプリケーションにおいて、アプリ終了してもプロセスが終了しない場合がある。
2007でも発生していたのだけれど。そのまま放置するといずれリソース不足で困ることになる。
把握している発生条件は、
・クライアントがXP
・ADOで外部DB接続するアプリ
・レポートをダイアログで開く
ダイアログにしない限り現象は確認できない
ADPでも発生していた話を聞いている
バックエンドaccdbについては現象を発生していない
ADO+MySQLは発生する

2010/05/29

access2010 2007との互換性 どうなるか その2

CurrentDB.Propertiesを見る機会があったから併せて確認。
Option Compare Database
Option Explicit

Private Sub ShowVersion_Click()
    MsgBox "Access Ver. : " & Application.CurrentDb.Properties("Version")
End Sub
最初は、12.0になっている。この状態に2010新機能の何かを加えると、
 14.0になる。

access2010 テーマ変更に使うプロパティ

Sub ShowThemeProperty()
    Debug.Print Application.CurrentDb.Properties("Theme Resource Name")
End Sub

Sub SetThemeProperty()
    Application.CurrentDb.Properties("Theme Resource Name") = "ThemeName"
End Sub
だけど瞬時に切り替わるわけではない。UIで変更すると変わるわけだからなんらか方法があるかも

UIから変更とかしてるとどんどん共有リソースのテーブルに格納されていくから、
Currentproject.AddSharedImageメソッドで追加してからプロパティ更新かな。

access2010 アプリケーションパーツ その3

アプリケーションパーツを作成すると、(ユーザフォルダ)\AppData\Roaming\Microsoft\Templates\Accessにaccdtテンプレートファイルができるのであるが、accdtの中身をのぞいてみた。accdtは、xml/txtファイルのzipアーカイブ。Office2007からファイルは基本的にzip。つまり、内容を理解していればaccdt ファイルを直接編集できるということ。accdtファイルをzipにリネームもしくはアーカイバでオープン。
わかりやすいところで\docProps\core.xml
カテゴリーとかここで編集することで、アプリケーションパーツメニュー上の表示を変更可能。
\templete\icon
\templete\preview
には、backstageとかメニューに表示される画像
\templete\database以下に各オブジェクト情報は埋め込まれている。

VBA参照設定 \templete\database\vbaReferences.xml




\template\database\objects\form(form_name).txtにフォーム情報あれこれ

2010/05/28

access2010 アプリケーションパーツ その2

インスタンス化フォームってなぁーに?って状態だったが結構便利なものであることがわかった気がする。
先エントリのツールをインスタンス化フォームに指定してテンプレートを作成した。
パーツとして開いてみます。
パーツのフォームが起動するが、インスタンスなのでナビゲーションウインドウに表示されない。フォームを閉じるとき保存されないから、一時的に使用する小道具っぽい使い方をしようかな。今回のツールにちょうど良い感じになった。

access2010 CommandButton Properties

コマンドボタンを始めとし各コントロール表示系のプロパティが増えたのであるが、どうも整理がつかないのでツールっぽいものを作ってみたと。
各パラメータ調整後、ボタン押下で、イミディエイトにWith~End Withを出力

基本的には、UseTheme=True で、 Themeの色フォントを使用する

With Me.cmd00
    .UseTheme = True
    .Gradient = 12
    .BackThemeColorIndex = 4
    .ForeThemeColorIndex = 0
    .HoverForeThemeColorIndex = 0
    .BackShade = 100
    .BackTint = 60
    .PressedThemeColorIndex = 4
    .HoverThemeColorIndex = 4
    .HoverTint = 40
    .PressedTint = 100
    .ForeTint = 75
    .HoverForeTint = 75
    .PressedForeThemeColorIndex = 0
    .PressedForeTint = 75
    .BorderStyle = 1
    .BorderThemeColorIndex = 4
    .BorderTint = 60
    .BorderWidth = 0
    .HoverShade = 100
    .PressedShade = 75
    .Shape = 1
    .BorderShade = 100
    .Bevel = 0
    .Glow = 0
    .Shadow = 0
    .SoftEdges = 0
    .ForeShade = 100
    .HoverForeShade = 100
    .PressedForeShade = 100
    .GridlineThemeColorIndex = 1
    .GridlineTint = 100
    .GridlineShade = 65
    .GridlineStyleTop = 0
    .GridlineStyleBottom = 0
    .GridlineStyleLeft = 0
    .GridlineStyleRight = 0
    .GridlineWidthTop = 1
    .GridlineWidthBottom = 1
    .GridlineWidthLeft = 1
    .GridlineWidthRight = 1
    .ThemeFontIndex = 1
End With
順序がいい加減になってしまったことは忘れる。

2010/05/25

access2010 2007との互換性 どうなるか

2010で作成したaccdbを2007で使用したいとする。
2010からの新機能などについては当然2007で作動しない。実際のところどうなるのか。
2010でテーブルとその連結フォームで様子見。2007は、XPSP3

基本パターンとして、テーブルとフォームは2007製で2010で変更。
・なにもしてない
特に問題なし

・集計フィールド追加してみた
順当な結果。で、集計フィールドを削除してみた
集計フィールド削除しても、もとには戻らないという感じ。
テーブル1を作り直してみた。
操作できるようになるが、アラートはそのまま。
だから、新しいaccdbにインポートして使えってことか。

基本のパターンにデータマクロを設定してみた。
読み取り専用になる。先の資料通り。データマクロは起動しない。
データマクロを削除してみた。
状況としては変わらず読み取り専用に。作り直すかインポートで使えるようになる。

もろもろ考えると2007対応はちとめんどくさいな。
2010で2007対応accdbを製造することは可能。だが、行程中一度でも2010新機能を設定した場合、その時点でバージョン14が確定。2007で動作するとしてもアラートが残ると。新たなaccdb(14と確定してない)にインポートしておおむねの2007対応か。

Access2010 2007との互換性資料

Backward Compatibility between Access 2010 and Access 2007 | MSDN

ポイントは、2007からインポートすることで2010新機能を設定しないaccdbが作れるということだろか

2010/05/21

access2010 ADO非同期処理 メモ Form.Open

Option Compare Database
Option Explicit

Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private WithEvents cnCls1 As Class_ADOConnectionAsyncWithDialog

Private cnCondition As Boolean
Private OpenCancel As Boolean
Private cnErrMsg As String

Private Sub SetInit()
    Set cnCls1 = New Class_ADOConnectionAsyncWithDialog
    cnErrMsg = ""
    cnCls1.ConnectionStart
End Sub

Private Sub cnCls1_Connected(cnStatus As ADODB.EventStatusEnum, cnError As ADODB.Error)
    If cnStatus = adStatusOK Then
        cnCls1.ExecQueryReadOnly "procedurestring"
    Else
        OpenCancel = True
        cnErrMsg = "Connection Error:" & cnError.Description
        cnCls1.ConnectionClose'cnErrMsg代入を先にしないとConnectionCloseが先に実行される場合がある
    End If
End Sub

Private Sub cnCls1_ExecuteComplete(cnStatus As ADODB.EventStatusEnum, ResultRS As ADODB.Recordset, ResultRecordsAffected As Long, cnError As ADODB.Error)
    If cnStatus = adStatusOK Then
        'ここでいろいろセッティング
    Else
        OpenCancel = True
        cnErrMsg = "Execute Error:" & cnError.Description
    End If
    cnCls1.ConnectionClose 
End Sub

Private Sub cnCls1_DisConnected()
    Set cnCls1 = Nothing
    cnCondition = True
End Sub

Private Sub Form_Open(Cancel As Integer)
On Error GoTo Errhnd
    cnCondition = False
    OpenCancel = False
    SetInit
    While cnCondition = False'ここでLoopさせて待機
        DoEvents
        Sleep 100
    Wend
    If Not cnErrMsg = "" Then MsgBox cnErrMsg
    Cancel = OpenCancel
Exit Sub
Errhnd:
    Cancel = True
End Sub

Private Sub Form_Close()
On Error Resume Next
    Set cnCls1 = Nothing
End Sub

2010/05/20

access2010 Form.Errorイベント メモ

2010に限ることではない
エラーコード失念して毎回確かめてる
Private Sub Form_Error(DataErr As Integer, Response As Integer)
    Select Case DataErr
        Case 2113 '書式に適さなかった
            Response = acDataErrContinue '既定アラート抑止
            
        Case 2279 'InputMaskに違反
            Response = 0 '0でもいい
            ActiveControl.Undo
        Case 2107 '入力規則に違反
            Response = 0
            MsgBox ActiveControl.Name & "は、○○です。", vbInformation, "入力規則違反"
        Case Else
            Response = acDataErrDisplay
            
    End Select
End Sub

access2010 不具合解消の件

OSからインストールしなおして、不具合が見られない 
2007アンインストール環境だったからなのか、使用経過によるものなのか、それは不明

2010/05/19

access2010 フィールドサイズ変更

IMEModeに引き続き、これもだめだ  o.......rz
もういや。 32bitを推奨というのもわからなくもないという考えになりつつある。
32bitは、こんなことない。ぐぬぬぬ

access2010 IMEModeプロパティ

64bitで使用していると、IMEModeプロパティが効かない
1.Win7/64+office2010/64がだめ
2.Win7/32+office2010/32は大丈夫
3.XpSp3+runtime2010は大丈夫
64/32ともsample作って試したが、64上での動作だけがだめだ

Win7/64+office2007は無事に動いてたから、IME含めoffice2010/64が原因だろうな。
次回メンテでoffice2010/32にすることも検討しよう

access2010 FileSystemObject その2

もういい。めんどうだ
きちんと動く気がしない

Option Compare Database
Option Explicit

Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private objFileSys As Object
Private objShell As Object

Private Sub Class_Initialize()
    Set objFileSys = CreateObject("Scripting.FileSystemObject")
    Set objShell = CreateObject("Shell.Application")
End Sub

Private Sub Class_Terminate()
    Set objFileSys = Nothing
    Set objShell = Nothing
End Sub

Public Function CreateZipFile(ZipFilePathString As Variant, _
                              ParamArray TargetFilesPathString()) As Variant 
'Booleanにしてたけどなんか変
'基本的には上書き仕様。アーカイブに追加は無し。
On Error GoTo ErrHnd

Dim n As Integer
Dim strZipData As String
Dim objFolder As Object
Dim objFolderItem As Object
Dim objDestination As Object

    CreateZipFile = True
    
    strZipData = "PK" & Chr(5) & Chr(6) & String(18, 0)
    
    If UCase(objFileSys.GetExtensionName(ZipFilePathString)) <> "ZIP" Then
        Debug.Print "拡張子が違います。"
        CreateZipFile = False
        Exit Function
    End If
'zip存在してたら削除して作り直し
    If objFileSys.FileExists(ZipFilePathString) Then
       objFileSys.DeleteFile ZipFilePathString
    End If
    objFileSys.CreateTextFile(ZipFilePathString, False).Write strZipData
    
    Set objDestination = objShell.NameSpace(ZipFilePathString)
    For n = 0 To UBound(TargetFilesPathString)
        Set objFolder = objShell.NameSpace(objFileSys.GetParentFolderName(TargetFilesPathString(n)))
        Set objFolderItem = objFolder.ParseName(objFileSys.GetFileName(TargetFilesPathString(n)))
        If objFolderItem Is Nothing Then
            Debug.Print "ファイルがありません。:" & TargetFilesPathString(n)
            objFileSys.DeleteFile ZipFilePathString
            CreateZipFile = False
            Exit Function
        End If
        objDestination.CopyHere objFolderItem, 20 'ここが効かない
'追加ファイルごとにループで待機することで、でかファイルでもエラーでなーす。
'だけど経過ダイアログが消せてないからキャンセル押下で無限ループ
        Do Until objDestination.Items().Count = n + 1
            DoEvents
            Sleep 1000
        Loop
    Next

Exit Function
ErrHnd:
    CreateZipFile = False
    Debug.Print Err.Number, Err.Description
End Function

Public Function ExtractZipFile(TargetZipFilePath As Variant, DestinationFolderPath As Variant) As Boolean
On Error GoTo ErrHnd
Dim objFile As Object
Dim objDestination As Object

    ExtractZipFile = True

    If UCase(objFileSys.GetExtensionName(TargetZipFilePath)) <> "ZIP" Then
        Debug.Print "拡張子が違います。"
        ExtractZipFile = False
        Exit Function
    End If
    
    If Not objFileSys.FolderExists(DestinationFolderPath) Then
        objFileSys.CreateFolder DestinationFolderPath
    End If
    
    Set objFile = objShell.NameSpace(TargetZipFilePath)
    Set objDestination = objShell.NameSpace(DestinationFolderPath)
    objDestination.CopyHere objFile.Items, 16 '同一ファイル名は上書き
Exit Function
ErrHnd:
    ExtractZipFile = False
    Debug.Print Err.Number, Err.Description
End Function

Public Function FolderExists(PathStrings As Variant) As Boolean
    FolderExists = objFileSys.FolderExists(PathStrings)
End Function

Public Function FileExists(PathStrings As Variant) As Boolean
    FileExists = objFileSys.FileExists(PathStrings)
End Function

Public Function GetFileName(PathStrings As Variant) As String
    GetFileName = objFileSys.GetFileName(PathStrings)
End Function

'
Public Function BuildPath(FolderPathString As Variant, FileNameString As String) As Variant
    BuildPath = objFileSys.BuildPath(FolderPathString, FileNameString)
End Function

Public Function GetAbsolutePathName(FilePathString As Variant) As Variant
    GetAbsolutePathName = objFileSys.GetAbsolutePathName(FilePathString)
End Function

Public Function GetBaseName(FilePathString As Variant) As String
    GetBaseName = objFileSys.GetBaseName(FilePathString)
End Function

Public Function GetExtensionName(FilePathString As Variant) As Variant
    GetExtensionName = objFileSys.GetExtensionName(FilePathString)
End Function

Public Function GetParentFolderName(FilePathString As Variant) As String
    GetParentFolderName = objFileSys.GetParentFolderName(FilePathString)
End Function

Public Function CopyFile(TargetFilePath As Variant, DestinationFilePath As Variant) As Boolean
On Error GoTo ErrHnd
    CopyFile = True
    
    objFileSys.CopyFile TargetFilePath, DestinationFilePath
Exit Function
ErrHnd:
    CopyFile = False
    Debug.Print Err.Number, Err.Description
End Function

Public Function CopyFolder(TargetFolderPath As Variant, DestinationFolderPath As Variant) As Boolean
On Error GoTo ErrHnd
    CopyFolder = True
    
    objFileSys.CopyFolder TargetFolderPath, DestinationFolderPath
Exit Function
ErrHnd:
    CopyFolder = False
    Debug.Print Err.Number, Err.Description
End Function

Public Function MoveFile(TargetFilePath As Variant, DestinationFolderPath As Variant) As Boolean
On Error GoTo ErrHnd
    MoveFile = True
    
    objFileSys.MoveFile TargetFilePath, DestinationFolderPath
Exit Function
ErrHnd:
    MoveFile = False
    Debug.Print Err.Number, Err.Description
End Function

Public Function MoveFolder(TargetFolderPath As Variant, DestinationFolderPath As Variant) As Boolean
On Error GoTo ErrHnd
    MoveFolder = True
    
    objFileSys.MoveFolder TargetFolderPath, DestinationFolderPath
Exit Function
ErrHnd:
    MoveFolder = False
    Debug.Print Err.Number, Err.Description
End Function

Public Function DeleteFile(TargetFilePath As Variant) As Boolean
On Error GoTo ErrHnd
    DeleteFile = True
    
    objFileSys.DeleteFile TargetFilePath
Exit Function
ErrHnd:
    DeleteFile = False
    Debug.Print Err.Number, Err.Description
End Function

Public Function DeleteFolder(TargetFolderPath As Variant) As Boolean
On Error GoTo ErrHnd
    DeleteFolder = True
    
    objFileSys.DeleteFolder TargetFolderPath
Exit Function
ErrHnd:
    DeleteFolder = False
    Debug.Print Err.Number, Err.Description
End Function

Public Function CreateFolder(TargetFolderPath As Variant) As Boolean
On Error GoTo ErrHnd
    CreateFolder = True
    
    objFileSys.CreateFolder TargetFolderPath
Exit Function
ErrHnd:
    CreateFolder = False
    Debug.Print Err.Number, Err.Description
End Function

2010/05/18

access2010 ParamArray なにこれ

なんでこうなるの?
おかげでファイルがないって怒られる。配列かコレクションでいれるか

access2010 FileSystemObject

別にaccessに限ってのことではないんだけど。苦手だから使ってなかったけど使いそうな気配
育てていこうかな。クラスにする必要あったのかなぁ
あー、よくかんがえたらzipアーカイブ処理は非同期だなぁ
Option Compare Database
Option Explicit

Private objFileSys As Object
Private objShell As Object

Private Sub Class_Initialize()
    Set objFileSys = CreateObject("Scripting.FileSystemObject")
    Set objShell = CreateObject("Shell.Application")
End Sub

Private Sub Class_Terminate()
    Set objFileSys = Nothing
    Set objShell = Nothing
End Sub

Public Function CreateZipFile(ZipFilePathString As Variant, ParamArray TargetFilesPathString()) As Boolean
On Error GoTo ErrHnd
'http://blog.livedoor.jp/humanfrog/archives/27718638.htmlから勝手に引用参考にさせていただいた。いい世の中だなぁ
Dim n As Integer
Dim strZipData As String
Dim strFile As String
Dim objFolder As Object
Dim objFolderItem As Object
Dim objDestination As Object

    CreateZipFile = True
    
    strZipData = "PK" & Chr(5) & Chr(6) & String(18, 0)
    
    If UCase(objFileSys.GetExtensionName(ZipFilePathString)) <> "ZIP" Then
        Debug.Print "拡張子が違います。"
        CreateZipFile = False
        Exit Function
    End If

    If Not objFileSys.FileExists(ZipFilePathString) Then
        objFileSys.CreateTextFile(ZipFilePathString, False).Write strZipData
    End If

    Set objDestination = objShell.NameSpace(ZipFilePathString)
    For n = 0 To UBound(TargetFilesPathString)
        Set objFolder = objShell.NameSpace(objFileSys.GetParentFolderName(TargetFilesPathString(n)))
        Set objFolderItem = objFolder.ParseName(objFileSys.GetFileName(TargetFilesPathString(n)))
        If objFolderItem Is Nothing Then
            Debug.Print "ファイルがありません。:" & TargetFilesPathString(n)
            objFileSys.DeleteFile ZipFilePathString
            CreateZipFile = False
            Exit Function
        End If
        objDestination.CopyHere objFolderItem, 16
    Next
Exit Function
ErrHnd:
    CreateZipFile = False
    Debug.Print Err.Number, Err.Description
End Function

Public Function ExtractZipFile(TargetZipFilePath As Variant, DestinationFolderPath As Variant) As Boolean
On Error GoTo ErrHnd
Dim objFile As Object
Dim objDestination As Object

    ExtractZipFile = True

    If UCase(objFileSys.GetExtensionName(TargetZipFilePath)) <> "ZIP" Then
        Debug.Print "拡張子が違います。"
        ExtractZipFile = False
        Exit Function
    End If
    
    If Not objFileSys.FolderExists(DestinationFolderPath) Then
        objFileSys.CreateFolder DestinationFolderPath
    End If
    
    Set objFile = objShell.NameSpace(TargetZipFilePath)
    Set objDestination = objShell.NameSpace(DestinationFolderPath)
    objDestination.CopyHere objFile.Items, 16 '同一ファイル名は上書き
Exit Function
ErrHnd:
    ExtractZipFile = False
    Debug.Print Err.Number, Err.Description
End Function

Public Function FolderExists(PathStrings As Variant) As Boolean
    FolderExists = objFileSys.FolderExists(PathStrings)
End Function

Public Function FileExists(PathStrings As Variant) As Boolean
    FileExists = objFileSys.FileExists(PathStrings)
End Function

Public Function GetFileName(PathStrings As Variant) As String
    GetFileName = objFileSys.GetFileName(PathStrings)
End Function

'
Public Function BuildPath(FolderPathString As Variant, FileNameString As String) As Variant
    BuildPath = objFileSys.BuildPath(FolderPathString, FileNameString)
End Function

Public Function GetAbsolutePathName(FilePathString As Variant) As Variant
    GetAbsolutePathName = objFileSys.GetAbsolutePathName(FilePathString)
End Function

Public Function GetBaseName(FilePathString As Variant) As String
    GetBaseName = objFileSys.GetBaseName(FilePathString)
End Function

Public Function GetExtensionName(FilePathString As Variant) As Variant
    GetExtensionName = objFileSys.GetExtensionName(FilePathString)
End Function

Public Function GetParentFolderName(FilePathString As Variant) As String
    GetParentFolderName = objFileSys.GetParentFolderName(FilePathString)
End Function

Public Function CopyFile(TargetFilePath As Variant, DestinationFilePath As Variant) As Boolean
On Error GoTo ErrHnd
    CopyFile = True
    
    objFileSys.CopyFile TargetFilePath, DestinationFilePath
Exit Function
ErrHnd:
    CopyFile = False
    Debug.Print Err.Number, Err.Description
End Function

Public Function CopyFolder(TargetFolderPath As Variant, DestinationFolderPath As Variant) As Boolean
On Error GoTo ErrHnd
    CopyFolder = True
    
    objFileSys.CopyFolder TargetFolderPath, DestinationFolderPath
Exit Function
ErrHnd:
    CopyFolder = False
    Debug.Print Err.Number, Err.Description
End Function

Public Function MoveFile(TargetFilePath As Variant, DestinationFolderPath As Variant) As Boolean
On Error GoTo ErrHnd
    MoveFile = True
    
    objFileSys.MoveFile TargetFilePath, DestinationFolderPath
Exit Function
ErrHnd:
    MoveFile = False
    Debug.Print Err.Number, Err.Description
End Function

Public Function MoveFolder(TargetFolderPath As Variant, DestinationFolderPath As Variant) As Boolean
On Error GoTo ErrHnd
    MoveFolder = True
    
    objFileSys.MoveFolder TargetFolderPath, DestinationFolderPath
Exit Function
ErrHnd:
    MoveFolder = False
    Debug.Print Err.Number, Err.Description
End Function

Public Function DeleteFile(TargetFilePath As Variant) As Boolean
On Error GoTo ErrHnd
    DeleteFile = True
    
    objFileSys.DeleteFile TargetFilePath
Exit Function
ErrHnd:
    DeleteFile = False
    Debug.Print Err.Number, Err.Description
End Function

Public Function DeleteFolder(TargetFolderPath As Variant) As Boolean
On Error GoTo ErrHnd
    DeleteFolder = True
    
    objFileSys.DeleteFolder TargetFolderPath
Exit Function
ErrHnd:
    DeleteFolder = False
    Debug.Print Err.Number, Err.Description
End Function

Public Function CreateFolder(TargetFolderPath As Variant) As Boolean
On Error GoTo ErrHnd
    CreateFolder = True
    
    objFileSys.CreateFolder TargetFolderPath
Exit Function
ErrHnd:
    CreateFolder = False
    Debug.Print Err.Number, Err.Description
End Function

2010/05/17

コピペできるか





程よく改行入れとけばいけるな

<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application">
 <DataMacro Event="BeforeChange">
  <Statements>
   <Comment>できるかな</Comment>
  </Statements>
 </DataMacro>
</DataMacros>

<?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="RunCode">
    <Argument Name="FunctionName">test()</Argument>
   </Action>
  </Statements>
 </UserInterfaceMacro>
</UserInterfaceMacros>

これはだめだな


 
  
   
    test()
   
  
 

access2010 Sharepoint2010動作環境作った時のメモ

WindowsServer2008R2
SQLServer2008R2(reporting service)
SharepointServer2010Ent
AD環境(SQLServer用ドメインアカウント)

SQLServerインストール、ReportServerのモードはSharepoint統合
SharepointSeverインストール、サーバファーム(スタンドアローンじゃないほう)

インストール後、取り急ぎWebデータベース(access service)は使用可能だが、レポート機能が未構成

SharepointServer
・サーバの全体設定からSQLServerReportingServices統合設定

SQLServer
http://technet.microsoft.com/ja-jp/library/ee662542.aspx の
”接続モードで Reporting Services アドインをインストールするには ”の項番3/4a/4bの通り、設定ファイルの編集

2010/05/16

access2010 暗号化がさらに...だそうです


これはなんだ?ということで確認。
どこで出てくるかというと、ここ

行レベルのロックが無視されるらしいです。なので、バックエンドにする場合、2007以前に対応する場合には、以前の暗号化を使用するということになるっぽい。デフォルト設定で既定の暗号化になっていたから、フロントエンドはそのままでいいかもとして使ってみる。

office2010 この情報が役にたちましたか?

これが気になってた。
セキュリティセンターで設定可でした。

access2010 フィールドの入力規則

2010から入力規則が改良されたので整理。
フィールドの入力規則はフィールドのbeforeupdate、レコードの入力規則はレコードのbeforeupdateと把握しておく。なので、フィールドの入力規則は今までのものと同じ。レコードの入力規則が追加されたということ。
使い方としては、フィールドの入力規則はフィールドで完結する条件式、レコードの入力規則は複数フィールドを参照した条件式を使うことが多いかと。
複雑な状況になるのであれば、BeforeChangeデータマクロでよいかと。

例として、日付フィールドを持つテーブルに入力規則 [Fdate1]>Date() を設定
フィールドの入力規則の場合、フィールドに本日以前の日付入力ができない。
レコードの入力規則の場合、日付フィールドが本日以前であるレコードのinsert/updateもできない。
こんな使い方もできる。本来の用途とは違うかもだが。これだったらデータマクロの方がいいかな。

リンクテーブルで
 ADO接続で、といってもOLEだけど
外部からOLEDBで
 外部からODBCで
 更新クエリだけメッセージでねぇ

2010/05/15

sharepoint2010 ちょっとだけ

office2010/64bitだとだめなんだってよ

access2010 SharedResources

Sub addImage()
    CurrentProject.AddSharedImage imgnamestring, fullpathstring
End Sub

Sub listResources()
Dim Srs As SharedResources
Dim Sr As SharedResource

    Set Srs = CurrentProject.Resources

    For Each Sr In Srs
        Debug.Print Sr.Name, Sr.Type
    Next
End Sub

Sub delResource()
Dim Srs As SharedResources
Dim Sr As SharedResource

    Set Srs = CurrentProject.Resources

    For Each Sr In Srs
        If Sr.Name = resourcenamestring Then Sr.Delete
    Next
End Sub

access2010 BrowseTo

2010から使用できるBrowseToのメモ
サブフォームをネストしてあって、メインフォームからサブフォームの画面遷移するコマンド。
Where条件式/データモードは、OpenFormメソッドのオプションと同じだろうから放置。
ページはWeb専用だから使うときに調べる。
サブフォームコントロールへのパスの書き方は、サブフォームコントロールを”>”で繋ぐ。
Option Compare Database
Option Explicit

'遷移だけならSubFormコントロール/Formプロパティで繋ぐのと変わらん
Private Sub cmd00_Click()
    Me.subForm00.Form.subForm01.Form.subForm02.Form.subForm03.SourceObject = "F01"
End Sub

Private Sub cmd01_Click()
'ここが実行されSourceObjectが変更されてしまうと、cmd00_Clickは実行時エラー
    Me.subForm00.SourceObject = "F07"
End Sub

Private Sub cmd02_Click()
'cmd01_Click実行後であっても意図したとおり遷移する
'フォームイベントは、サブフォーム同様ネストの深い順で発生
    DoCmd.BrowseTo acBrowseToForm, "F05", "F_00.subForm00>F_01.subForm01>F_02.subForm02>F_03.subForm03"
End Sub

Private Sub cmd03_Click()
'見た目上ではあるが、ネスト中間のフォームだけを変更できる。
'実際には、変更されない親フォーム以外はOpenし直している。
    DoCmd.BrowseTo acBrowseToForm, "F05", "F_00.subForm00>F_01.subForm01>F_02_1.subForm02>F_03.subForm03"
End Sub

2010/05/14

access2010 ランタイム その2

ランタイム環境での表示系を見ます。
BackStageViewの項目を表示しない。既定で印刷タブ/プライバシーオプション/終了のみ。
なので、
  <backstage>
    <tab idMso="TabPrint" visible="false" />
    <button idMso="ApplicationOptionsDialog" visible="false" />
    <button idMso="FileExit" visible="false" />
  </backstage>
で、表示がなくなる。これを見る限り、オプションボタンがプライバシーオプションに置き換わっている感じする。ランタイム環境でセキュリティセンターが開かないことに連結する内容かもしれない。
データシートビューで contextualTabの表示もない。

access2010 ランタイム

ランタイム配布ファイルを開くとビルトインらしきリボンを見ることができます。これはなんだろか

で、バックステージ

セキュリティセンターの設定ボタンがありません

仕様が変わったのかもしれません。
2007ランタイムのときはセキュリティセンターを開くことができて、かつセキュリティセンターの設定ボタンが存在していた。

ちなみに、
2010作成したソースなしのファイルaccdeを2007ランタイムで開くと、
ソースあり(accdb/accdr)は開く。コンパイル結果が違うんでしょうな。2007配布には2007でpackageする必要があるということ。
64/32の間についても同様

access2010 オプションダイアログ/セキュリティセンター

ついでに、気になってなので確認。ぐぬぬぬな感じ。
runtime modeもしくはruntimeでセキュリティセンター開かない仕様になったんだろうか。
2007のおぼえてねぇ
それはそれでいいんだけど、セキュリティセンターがruntime modeで強制終了ってよ
コードが悪いんかな。

オプションダイアログを開く
Win7+製品32bitでaccdb ダイアログ開く
Win7+製品32bitでaccdr 実行時エラー
Win7+製品32bitでaccde ダイアログ開く
Win7+製品64bitでaccdb ダイアログ開く
Win7+製品64bitでaccdr 実行時エラー
Win7+製品64bitでaccde ダイアログ開く
Win7+Runt64bitでaccdb 実行時エラー/ダイアログ開かない/終了する
Win7+Runt64bitでaccdr 実行時エラー/ダイアログ開かない/終了する
Win7+Runt64bitでaccde イベント時エラー発生/ダイアログ開かない/終了しない
XPSP3+Runtimeでaccdb 実行時エラー/ダイアログ開かない/終了する
XPSP3+Runtimeでaccdr 実行時エラー/ダイアログ開かない/終了する
XPSP3+Runtimeでaccde イベント時エラー発生/ダイアログ開かない/終了しない
<<追試>>
XPSP3+Runtime+2010std 2010stdなしと同じ
XPSP3+Runtime+Office2007 上に同じ

'参照設定:Microsoft Office 14.0 Library
Sub OpenApplicationOptionsDialog()
    CommandBars.ExecuteMso ("ApplicationOptionsDialog")
End Sub

セキュリティセンターを開く
Win7+製品32bitでaccdb ダイアログ開く
Win7+製品32bitでaccdr 動作停止で異常
Win7+製品32bitでaccde ダイアログ開く
Win7+製品64bitでaccdb ダイアログ開く
Win7+製品64bitでaccdr 動作停止で異常
Win7+製品64bitでaccde ダイアログ開く
Win7+Runt64bitでaccdb ダイアログ開かない
Win7+Runt64bitでaccdr ダイアログ開かない
Win7+Runt64bitでaccde ダイアログ開かない
XPSP3+Runtimeでaccdb ダイアログ開かない
XPSP3+Runtimeでaccdr ダイアログ開かない
XPSP3+Runtimeでaccde ダイアログ開かない

'参照設定:Microsoft Office 14.0 Library
Sub OpenSecurityCenterDialog()
    CommandBars.FindControl(msoControlButton, 3627).Execute
End Sub

<<追試>>
XPSP3+Runtime+Office2010stdで3つ拡張子とも終了してしまう

XPSP3+Runtime+Office2007では、ダイアログは開かないだけ、終了はしない。
よく考えてみれば、2010で作成したファイルを使用しているので、ライブラリ参照に原因があるのかもしれん。

幾分かは不具合っぽく思えるけど、いずれにせよセキュリティセンターとオプションは、ランタイム環境で開くことができない状況ということ。

最新取りまとめメモ

office2010 リンクメモ

Office 2010: Developer References Nov09

Office 2010 Reference: Office Fluent User Interface XML Schema 0911

Office 2010 Help Files: Office Fluent User Interface Control Identifiers 1109

控え忘れてたリンクたち。もうわすれない。

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接続した場合
リンクテーブル状態