たまにはコーディングの決め事らしいものも書いておく。


プログラミングを行うなら、セルへのアクセスにA1形式の利用は避け、R1C1形式を使うほうがよい。繰り返し処理を実施する際、行と列を個々に指定できないA1形式は致命的とさえ考える。
A1とR1C1で速度差があるかどうかは知らないが、どんぐりの背比べで程度だろうと考えられるので議論の価値はないと判断する。もし速度差が気になるならセルの内容を変数上に展開して処理する方がよほど高速である。


また、データベースの内容をセルに展開するような場合は、列に名前をつけるべきであろう。例えば3列目に顧客名があったとして

  Debug.Print Cells(2, 3).Value

とするのと

  Const COL_CUST_NAME As Integer = 3

    ‥

  Debug.Print Cells(2, COL_CUST_NAME).Value

とするのでは、どちらが可読性/メンテナンス性に優れているだろうか。この例ではただのConstにしているが、Enumを使ったりするともっとメンテナンス性は向上するだろう。
更に、データ開始行なども固定値で持っていればもっとよいだろう。


ようやく契約先での作業が増え、このようにネットへのアクセスもできるようになった。が、これから設計と製造のピークを迎える。


客先のSQL Server 2000 から SQL Server 2005 への移行を実施した。
マイクロソフトではデータマイグレーションとして移行支援プログラムを実施していた。今でもあるかは不明・・。

結論から言えば、提供されているマイグレーションツールでは移行がうまくいかなかった。これはマイクロソフトの問題ではなくおそらく私のやり方の問題であろう。
ただ、ツールで問題点は概ね洗い出せた洗い出せたので、あとは自前で環境移行とデータ移行を行った。

ここで詳細の手順を書くのが本意ではないが、簡単に書いておく。
1.ユーザーIDの移行(混合モードを利用しているため)
2.テーブル、ビュー、関数の定義のファイル化
3.ビューや関数の親子関係の調査と処理順番の設定
4.定義を自動作成 (ExcelVBAでツール作成)
5.データを移行 (ExcelVBAでツール作成)

初回は5.で「NULLを空文字に変換して移行」というドジを踏んでしまった。で、5.だけ日を改めた訳であるが、「せっかくだからVB.netで移行ツールを作ろう」ということにした。
DBアクセスも、ADOからADO.netに変えた(VB.netでADOの使い方を知らないだけであるが・・。)
ちなみに、恥ずかしながらADOとADO.netの差異は全く知らずに作成した。(何か違う、ということしか知らない)
テストをしたところ、処理速度は格段に改善された。40万件くらいのデータ移行が数分の1に短縮した。

さて、これを本番環境で使おうとすると、他のテーブルは問題ないのだが100万件を超えるテーブルの移行で「タイムアウト発生」で動かなかった。
ADO.netのタイムアウト時間を調整できないか見ても、短時間には分からずじまい。やむなく前回のツールの改良版を利用した。


ADOはタイムアウトにならなかったのにADO.netではタイムアウトになった原因を推測すると、ADOはデータの読み込みが完了してなくてもレコードセットの参照が可能であるが、ADO.netでは読み込みが完了しないと次のアクションに移れない、ということなのではないかと思う。
ADO.netは小中規模のデータベースアクセスには適するが、大量データには向かない、ということが言えるのではないだろうか。
単に私の無知なのかもしれないので、回避方法などがあるのかもしれない。情報をお持ちの方は情報提供をお願いします。





※書き直し /八月末削除予定 /DBアクセス


今回は珍しくリアルタイムでのブログ更新です。前回は11/13に「弱り目に祟り目」とあわせて時間が来たら自動公開するようにしたのが最後。


一度、友人宅で「ブログってなんだべ?」というのを実演したときに中途半端な記事をアップしたまま忘れ、その友達に削除をお願いしたというお茶目もやってしまいましたが、あれはいつだったか?ついでに「読者承認」もその友達にお願いしていました。なんか2名くらい増えている気がします。






さて、休載ですが、【家/仕事場でネットワークに接続できなかった】のが理由です。


まず家のPCですが、11/13に電源を切ったあと立ち上がらなくなりました。今のところ「もう電源くらいしか思い当たる節はない」です。今度の休み(28日)に販売元で検査して貰い(無料らしい)、故障箇所も第三者にチェックして頂く所存です。


まず仕事関連ですが、今の契約先のお客さん先の会議室で缶詰状態でした。現状分析やら要件定義やらですので、書き物ばかり。それも外部のPCはネットに接続できませんでず、いうなれば隔離病棟でした。


しかしながら、本当久しぶりに濃い仕事をこなしたなと思います。本業の方も、無事お客さんと金額的にも合意が取れ、結構大きな商いになります。これまたVBA案件だったりします。まだ話は大きくなる可能性がありますが、あとは契約先での作業でよいので久しぶりに契約先に戻ってきてのネット接続となりました。年が明けるとまた忙しくなりますが、思い通りに定義してあるので生産性は高くなる見込みです。






また、この期間にネタがいっぱいたまりました。ちょうど製造工程もありますので今後はコーディング規約関連により深く踏み込んでいけるもとの思います。









さて、年賀状の宛名関連ですが・・。


今週末、PCの修理が終わらなければ「すいません!」です。そうなると自宅のも手書きで・・という悲しい結果になります。


28日に作っても使う人はいないでしょうけれど、公開はしておきます。









ここ1ヶ月ちょっとの仕事はネットに繋げなかったのが逆に吉と出た部分もありますが、メールや参加しているSNSでは連絡が取れず迷惑を掛けているだろうし、「他界したのでは」と思われているかもしれません。そこは明日以降徐々に復帰するとして・・。


充実感がありましたが、疲労感も相当です。早く寝たいし、明日は寝込むかも・・。ブログ書いたら雑務やってさっさと帰ろう。









年内、また書く機会がありましたら。