2000年2月のエントリ

デバッグのアウトプットに例外が表示される。そこで

  • デバッグ中に [デバッグ]-[例外処理] でダイアログを出す
  • Microsoft C++ Exception を常に停止させる

として例外で停止させる。ここで原因は判明(単純な配列範囲例外)したのだが,その後のコードが

catch(...)

となっていた。結局,せっかく処理系が例外を発生させているのに全ての例外が catch されてしまって分からなくなっていたのだ。やはりめんどうでも exception の派生クラスを定義するなどした方がいいようだ。

都合により NT をセットアップ。とりあえずある社長様から頂いたサービスパック 3 を用意し,WindowsNT Workstation4.0 を入れる。途中までは前もやったので ok。前はここでサービスパック 4 を入れてディスプレイドライバを入れて落ちたのである。とりあえずサービスパックなしの状態でディスプレイドライバを入れる。で,サービスパック 3 をインストール。

無事起動。IE5.0 も入るし快適快適。そうそう。社長様が「Back Office Server には NT Server が入ってる」って言ってたな。ということで Microsoft さんが(無料で)送ってきた Back Office Server から NT Server を入れる。実行ファイルをダブルクリック。インストールディスクを作ってアップグレード。

無事起動。おお。サーバーだ。ノートでサーバーってのもいいですな。あとはサービスパック 4 以上じゃなきゃインストールできない SQL Server が入って PCIMCA の MIDI カードが使えて DirectX も使えれば Win98 から乗り換えられるのだが…。って 2000 入れろって感じでしょうか。

ちなみに使い勝手は…エクスプローラがローカルでも早い! ってのが感動した。(日記 1999/12/02 参照)

メモリリークでかなり悩む。昔の誰かのソースを移植していたのだが,

strdup

が原因だった。この関数は文字列をコピーするが,勝手に malloc するらしい。

Java で 4 バイトを数値として書き込もうとするが,どうもうまくいかない。入出力でエンコーディングを変換しているようなので,Writer を使ってバイナリを読み書きしようというのがまずいのか。OutputStream でやればいいのだが。

list 使用時に,list 要素のコピーコンストラクタがないとのエラーが出る。コピーコンストラクタはあるはずなのに…と調べていると,コピーコンストラクタの引数が const になっていなかった。

unsigned int i = strtol("0x80000000", &p, 16);

とやって,i が 0x7fffffff になる。正解は strtoul。

PostgreSQL ODBC ドライバ。VB からアクセスしているが,どうも書き込めない。Access でもできなかったのだが,ドライバの設定が読みとり専用になっていた。デフォルトが書き込み禁止なのか。覚えとかないと。

某ソフトのユーザー登録。オンライン登録はいいんだけど,以下の(見慣れた)エラーが出た。

データベースが実行できませんでした。
-2147217900
[Microsoft][ODBC SQL Server Driver][SQL Server]PRIMARY KEY 違反、制約 ‘XXX’: オフ゛シ゛ェクト ‘XXX’ に重複したキーを挿入しようとしました。

要するに他の人と主キーがかぶってるワケだが,まさか氏名だけで主キーにしてるワケではないだろう,と,ふとハガキの方を見ると,「ユーザー登録をデータベース化する上で、同姓同名の場合の判断を生年月日で行いますので、ご記入をお願いしております。」とか書いてあった。この世界に同じ氏名で同じ生年月日の人は絶対いないと思ってるのだろうか。

あとエラーって出るのはいいけど SQL Server のエラーメッセージを一般人に見せられても困るし。ユーザーへの簡単なエラーメッセージとどうすればいいかを書いて,詳しいエラーメッセージはサーバーのログに残すようにするって仕様にはできなかったのか。

# 実は某ウィルスチェッカソフトなんですが,いまいち信用がおけないなぁ,と思う昨今でした。まあパターンファイルはダウンロードできるしいいか。データベースの整合性はおかしくなるかも知れないけど私の知ったこっちゃない。