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連番

2020年10月10日土曜日

[python] locateCenterOnScreen で TypeError

pyautogui の locateCenterOnScreen では、
アイコンが見つからなかった場合に、Exception が発生しなくなっている。

import pyautogui
x, y = pyautogui.locateCenterOnScreen('icon.png')
pyautogui.click(x, y)


・リファレンス
image が画面にない場合は、ImageNotFoundException
https://pyautogui.readthedocs.io/en/latest/screenshot.html

・実際
Exception は発生せず、None が戻る。
このためサンプルの実装だと、None を x,y(タプル)に代入できず、以下のエラーとなる。
TypeError: cannot unpack non-iterable NoneType object

2020年9月10日木曜日

[VBA] Sgn 関数で内部エラーが発生

VBAの Sgn 関数で配列の未割り当てをチェックしている場合に、内部エラーが発生する。

■ サンプルコード
Dim arr() As String
If Sgn(arr) = 0 Then Debug.Print 0

■ エラーメッセージ
「実行時エラー 51、内部エラーです。」

これは Sgn 関数本来の使い方ではないが、どうやら以前に配列のチェック方法として広まったらしく、MS Office 32bit 環境では そこそこ動いていた。これが Office 64bit だとエラーになる。(※Windows の 64bit のことではない)

言語仕様でない使い方なので、この方法は止めましょう。


2020年7月19日日曜日

[ラズパイ] タスク バーを復旧する

Windows でいうと「タスク バー」になりますが、Raspberry Pi だとデフォルトの「パネル」になります。

パネルを削除していないユーザ、もしくは別の環境から設定ファイルをコピーして再ログインすれば、元に戻ります。
設定ファイルは以下

$HOME/.config/lxpanel/LXDE-pi/panels/panel

2020年6月30日火曜日

[Oracle] VIEWのSQLを出力する

Oracle のビュー定義は、データ・ディクショナリ・ビューを検索することで確認できますが、SQL*Plus で出力する場合は、システム変数の調整が必要です。

SET PAGESIZE 2000(SQLの行数、ヘッダの繰り返しを防ぐ)
SET LINESIZE 500(1行に表示するバイト数、途中での改行を防ぐ)
SET LONGCHUNKSIZE 500(これも1行のバイト数として必要)
SET LONG 10000(SQLのバイト数)

SELECT TEXT FROM USER_VIEWS
WHERE VIEW_NAME = 'view name'

2019年9月8日日曜日

[Python ] Flask + Blueprint で no attribute 'name'

サンプルを参考に Blueprint を始めてみたところ、エラーが発生した。

if blueprint.name in self.blueprints:
AttributeError: module '...' has no attribute 'name'


どうやら、同じエラーに直面した人も多い様子。

https://flask.palletsprojects.com/en/1.1.x/blueprints/

simple_page.py
simple_page = Blueprint('simple_page', __name__)

Flask側
app = Flask(__name__)
app.register_blueprint(simple_page)

このサンプルに限らず、同じ識別子の使いまわしのサンプルが多くて、誤誘導気味です。
register_blueprint() の引数に使っている simple_page は、モジュール名などではなくて、変数名です。

違和感ある設計ですね。。。

2019年8月12日月曜日

yum で https 接続エラー

yum で https のファイルをインストールできない場合の対処について。

IUS Community のリポジトリ追加で問題が発生した。
yum install https://centos7.iuscommunity.org/ius-release.rpm

■ 今回の状況
  1. 環境:CentOS7 64bit (DTI VPS)
  2. エラーメッセージ:
    Cannot open: https://centos7.iuscommunity.org/ius-release.rpm. Skipping.
    Error: Nothing to do

■ 問題を調査したところ、
・wget だと https に接続できる。
・curl だと https に接続できない。

yum の内部では curl を使っているため、https への接続が失敗していた。

■ 今回の対策
シンプルに対処するには、curl をアップデートすると解消する。
yum update curl