2002-03-05(Tue) [長年日記]
_ Access再び
というわけでそういうお仕事が回ってきた。前回と違い、モジュールはぜんぜんない...というふれこみだったのだが、よくよくみるとフォームのとこでマクロつかったり、VBAつかったりとバラバラ。なんじゃこりゃ。
とりあえず画面起動が遅いのをどうにかしてくれ、ということだったが、クエリで全件読んでからローカルでフィルタしてるように見える。サブフォームと親フォームの連動でリンクを指定した場合って、動的にwhereを設定してrequery、なんかしないよね?全件読んでからfiltering,だろうな。filter設定かえるだけで済むんだもん。
いろいろ確かめたのだが、主キーを指定してないテーブルを開くときにみょーに遅い。件数は2000件もないのに、5000件近く返すクエリよりも体感が遅いみたい。これは定義変更だな。
でも、テーブル定義を変更となれば影響度チェックも当然やらなきゃなんないが...。テーブルってそれ以外のオブジェクトから参照されるからどれにどのテーブルが参照されてんのかチェックしないと。って、やっぱりツール作るしかないか。
_ Rubyでextend
クラスメソッドを外に切り出したかったのだが、moduleにしてから extend でいいらしい。こんな感じmodule Fuga def hore "hore!" end end class Hoge extend Fuga end p Hoge.hore # -> hore!module内からextendするクラス内のクラス変数とかにアクセスしたい場合はこんな感じでいけそう。
module Fuga def retvar; end #空のメソッド def hore puts retvar end end class Hoge @@var = 'A' extend Fuga def Hoge.retvar @@var end end p Hoge.hore # -> A
_ Rubyでオブジェクト指向プログラミング
いままではどちらかというとclassとかも作らずにちょろっと書いては動かすようなのばかりだったのだけれど、苦しい場面に遭遇したので class ... end とかを使ってみたり。
何を書いたかというと汎用機の夜間バッチスケジューラの定義を引っこ抜いて、HTMLに変換というやつ。今までは正規表現で文字列を切り出してはHashに片っ端から放り込んで、と力まかせな方法だったのだけれど、今回はオブジェクトを作って、そのオブジェクト間の関連を相互に保持する形にし、中間結果はPStoreで保存、HTML化にはeRubyという構成。PStoreを使ったことで臨時作業(定義体から参照されるJCLが存在しているかのチェックとか)にも対応できて便利になった。