2021年8月29日日曜日

MSAccessのパススルークエリをCSV出力すると、3251エラー

MSAccessのVBAで、DoCmd.TransferText にパススルークエリを指定すると、エラーになる。
以前のMSAccessだと出来ていたはずだが。。
DoCmd.TransferText
  TransferType:=AcTextTransferType.acExportDelim,
  TableName:=パススルークエリ名,
  FileName:=出力ファイル.csv
(結果)3251 この操作は、このタイプのオブジェクトには実行できません。
(環境)MSAccess 2013 (32bit)

この対策として、
・パススルークエリをやめて、リンクテーブルを作成する。
・そのリンクテーブルを SELECT するビューを作成する。
・そのビューを、TransferText に指定する。

2021年7月30日金曜日

HUAWEI P20 lite (ANE-LX2J) をテレビで見る

手段について
USB Type-C - HDMI 変換ケーブル非対応
ミラキャスト(Miracast)、クロームキャスト等対応

HDMI 変換ケーブルについて

これは、P20 lite では非対応。
(USB Type-C 2.0 なので、Thunderbolt 3 / DisplayPort over Alternate Mode には非対応)

P20 lite 詳細スペック
https://www.gsmarena.com/huawei_p20_lite-9098.php

ミラキャストについて

これは対応しています。
ただし、動画配信をテレビで見るには、クロームキャストでないと非対応のサービスが多いです。

2021年7月25日日曜日

MS Access ナビゲーション ウィンドウのグループをVBAで変更

Microsoft Access の Navigation Pane にある Group を VBA で変更する方法です。

DoCmd のメソッドで提供されていれば助かるのだが、残念ながら見当たらない。 システムテーブルを直接編集して、CREATE したオブジェクトをグループに追加します。

今回の前提だと、手動で作成したグループに、VBA でオブジェクトを追加します。

使用するシステムテーブルと、その項目

MSysNavPaneGroups で必要な項目
Id Name
一意のId グループ名
(例) 9 グループ1

MSysNavPaneGroupToObjects で必要な項目
GroupID Id Name ObjectID Position
MSysNavPaneGroupsのId 一意のId 任意の項目 MSysObjectsのId 表示順
(例) 9 15 テーブル1 86 1

MSysObjects で必要な項目
Id Name
一意のId 名称1
(例) 86 テーブル1

グループに登録する手順

  1. VIEW 等のオブジェクトを CREATE
  2. MSysObjects から、そのオブジェクトの Id を検索
  3. MSysNavPaneGroups から、追加するグループの Id を検索
  4. MSysNavPaneGroupToObjects から、Idの最大値+1を算出(一意の Id)
    SELECT Max(Id) + 1 FROM MSysNavPaneGroupToObjects
  5. MSysNavPaneGroupToObjects から、Position の連番を算出、開始は1(Position に登録する連番)
    SELECT Nz(Max(Position), 0) + 1 FROM MSysNavPaneGroupToObjects
    WHERE GroupID = [追加するグループの Id]
この結果を元に、MSysNavPaneGroupToObjects にレコードを追加
Flags0(固定値)
GroupID追加するグループの Id
Icon0(固定値)
Id一意の Id
Name追加するオブジェクトの名称(任意)
ObjectID追加するオブジェクトの Id
Position連番