カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

オートメーション

AccessからOfficeアプリケーションを制御すること

1,940 views

テキスト型とメモ型 ACCESS

ACCESSからSQLServerに移行する際、テキスト型とメモ型について調査しました。

Microsoftサポートサイトより引用

テキストまたはテキストと数値の組み合わせによるデータを格納する場合は、テキスト型とメモ型の 2 種類のフィールドのデータ型 (フィールドのデータ型 : どのようなデータを格納できるかを決めるフィールドの特性。たとえば、テキスト型のフィールドには、テキストまたは数値で構成されるデータを格納できますが、数値型のフィールドには、数値データしか格納できません。)を使用できます。

テキスト型フィールドは、名前、住所などのデータ、および電話番号、パート番号、郵便番号などの計算する必要のない数字データを格納するために使用します。このフィールドには 255 文字までのデータを格納できますが、既定のフィールド サイズは 50 文字に設定されています。テキスト型フィールドに入力できる最大文字数は、”FieldSize/フィールドサイズ” プロパティで設定します。

メモ型フィールドは、255 文字を超えるデータを格納する場合に使用します。このフィールドには 65,536 文字までのデータを格納できます。書式が設定されたテキストや長い文書を格納する場合は、メモ型フィールドではなく OLE オブジェクト型フィールドを作成します。

テキスト型とメモ型のフィールドには、入力した文字だけが格納されます。通常以外の位置にあるスペースは格納されません。

テキスト型またはメモ型のフィールドでは、値を並べ替えたりグループ化したりできます。ただし、メモ型フィールドについては、最初の 255 文字だけを使用して、並べ替えまたはグループ化が行われます。


[2017.03.28追記]
ACCESSからSQLServerに移行した場合、メモ型フィールドはnvarchar(MAX)で対応することになるかと思いますが、そうするとデータの編集ができなくなるようなのでご注意ください。

29,235 views

リンクテーブルの更新(DAO)

Private Sub リンク更新_Click()
On Error GoTo Err_リンク更新

If MsgBox("リンクテーブルを更新します。よろしいですか?", vbYesNo + vbExclamation + vbDefaultButton2, "更新") = vbYes Then

  Dim db As Database, tdfLinked As TableDef
  Dim TableName As String, ErrName As String
  Set db = CurrentDb
  ErrName = ""

  TableName = "table1" 'テーブル名を指定する
  Set tdfLinked = db.TableDefs(TableName)
  tdfLinked.Connect = ";DATABASEdb1.mdb"
  tdfLinked.RefreshLink
  Set db = Nothing

  If Len(ErrName) > 0 Then
    MsgBox ErrName & "のテーブルは更新できませんでした。"
  Else
    MsgBox "終了しました。", , "確認"
  End If
End If

Exit Sub

Err_リンク更新:
  ErrName = ErrName & " " & TableName
  Resume Next

End Sub
10,112 views

ApplyFilter

Filter機能では条件の複数指定ができないようなので、代わりにApplyFilterを使用

構文  expression.ApplyFilter(FilterName, WhereCondition)

設定項目 内容
expression DoCmdオブジェクト[省略不可]
FilterName フィルタ名またはクエリ名を文字列式で指定[省略可能]
WhereCondition SQL文のWHERE句を文字列式で指定[省略可能]

例)

'日付が2003年1月1日から2003年12月31日までのデータを抽出
DoCmd.ApplyFilter , "sales_date between #2003/01/01# and #2003/12/31#"

フィルターを解除
Me.FilterOn = False
4,379 views

未定義関数Dir 解決法

ACCESSのMDBファイルを使用していて、何らかのプロシージャを実行したとき、
未定義関数Dirがあります等のエラーが発生することがある。

【解決法】
レジストリのSandboxModeの値を2にする

【操作】
スタートからファイル名を指定して実行を選択し、
「regedit」と入力しEnter。

レジストリエディタが起動するので、検索で「SandBoxMode」を探すか
以下のパスを辿って見つけて値を変更してください。

\\HKEY_LOCAL_MACHINE\Software\Microsoft\Jet4.0\engines\SandboxMode

※これで解決しない場合、他に考えられる原因はOfficeのアップデートを
適用していない場合があります。
その場合、アップデートすると解決することがあります。


SandBoxModeが見つからない

2019年9月2日追記

通常、レジストリを検索すれば「SandBoxMode」が見つかると思うのですが、特定のバージョンでは見つからない場合があるようです。
今回見つからなかったのはMicrosoft Office 2016の場合でした。
この場合、新たに値を作成すればうまくいきました。

Office 2016の場合は以下のようにパスを辿ってください。
\\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Access Connectivity Engine\Engines

そしてEnginesの中に値を作成します。
レジストリエディタの右側のボックスを右クリックし、[新規]-[DWORD(32ビット)値]と選択します。
名前は「SandBoxMode」と入力し、値に2を設定します。

他のバージョンについては以下のURLを参考にしてください。
サンドボックス-モードのオン-オフを切り替えてマクロを無効にする

4,660 views