広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

2014年07月29日

zlib で crc32 が計算できた

大抵はレファレンス実装を読んで自前で実装していたので、CRC32が必要だといわれた時、また面倒だなと思っていたところ、zlib にもそうした機能があることがわかり結構助かった

ヘッダに書いてあるやり方も実にシンプルだ

uLong crc = crc32(0, Z_NULL, 0);
crc = crc32(crc, data, len);


レファレンスコードをそのまま採用してもあまり困らないのだが、元々、 zlib をリンクしているようなライブラリでは簡単に呼べるので便利である





posted by いしちゃん at 23:30| Comment(0) | TrackBack(0) | zlib

2014年07月17日

FbConsole の対話型SQLツールが、自身の提示したSQLを受け付けない

ここでも 紹介したが、FbConsole は便利でもバグがあるという話なのだが、また別のやつが見つかった

プロシージャを定義し、その定義をツールのメタ情報から抜き取ったSQLを、FbConsole から流すと、なぜかエラーとなってしまう
ただし、同じSQLを isql ツールから流す場合は大丈夫なので、SQLを流すシーンによってエラーがあったりなかったりということになってしまうのであった

isqlではOKなのに、FbConsole ではダメな例)
set term ^^;
create procedure WV_TAB_A
(
rangeMin integer,
rangeMax integer
)
returns
(
UNIQID integer,
HOSTNM varchar(64)
)
AS
BEGIN
FOR SELECT UNIQID,HOSTNM FROM TAB_A WHERE UNIQID BETWEEN :rangeMin AND :rangeMax
INTO :UNIQID, :HOSTNM
DO SUSPEND;
END
^^
set term ;^^

両方で大丈夫にするためには、途中の改行をいくつか取り除く必要がある
set term ^^;
create procedure WV_TAB_A (
rangeMin integer, rangeMax integer
) returns (
UNIQID integer,
HOSTNM varchar(64)
) AS
BEGIN
FOR SELECT UNIQID,HOSTNM FROM TAB_A WHERE UNIQID BETWEEN :rangeMin AND :rangeMax
INTO :UNIQID, :HOSTNM
DO SUSPEND;
END
^^
set term ;^^



minne

全ての写真をオンラインで管理

月額300円〜で容量無制限・無期限

●●30 days Album PRO●●


2014年07月15日

GetVersionEx が Win8.1 からは使えなくなったようだ

従来のコードをメンテナンスしている際、Win8.1 対応コードを追加しようとしたが、びっくりの結果がわかった
やろうとしていたのは以下のようなこと

OSVERSIONINFOEX os = {0};
os.dwOSVersionInfoSize = sizeof(os);
GetVersionEx((OSVERSIONINFO*)&os);
switch ( os.dwMajorVersion ) {
case 6:
switch ( os.dwMinorVersion ) {
case 0: return "Vista";
case 1: return "Win7";
case 2: return "Win8";
case 3: return "Win8.1";
}
break;
}

ところが、上記 os.dwMinorVersionの値が、Win8.1 上で実行しても Win8 を示す 2が返ってきてしまったのだ(本来 3が返ってきてほしかった)

MSDNで質問してみたら、すぐに回答が付き、理由がわかった
要は GetVersionEx はマニフェストに応じて異なるバージョンを返すということだった(なぜそうしたかの合理的な理由は思い浮かばなかったが、ま、しょうがない)

GetVersionEx の解説





FbConsole が間違ったSQLを提示する

Firebird データベース管理コンソールとして、昔からある FbConsole.exe を使い続けている
これは使いやすく重宝しているのだが、今となってはいくつかバグがあり、注意を要する

1) まず、一旦ログインし、ログアウトするとログインできなくなる (プログラムを起動し直す必要がある)
2) テーブル表示ペインで、UTF-8文字列が化けてしまう

そしてさらに今回発見したのが、メタ情報から取得できるトリガーSQLが、不正な文法になっているケースである

例えば、以下のようなトリガーを作る
CREATE TRIGGER MY_TEST_TRIGGER FOR TEST_TABLE
BEFORE INSERT OR UPDATE
AS
BEGIN
new.RecordTimestamp = current_timestamp;
END

これをデータベースのメタ情報SQLで見てみると以下のようになってしまう
CREATE TRIGGER "MY_TEST_TRIGGER" FOR "TEST_TABLE"
ACTIVE POSITION 0
AS
BEGIN
new.RecordTimestamp = current_timestamp;
END

どこがまずいかというと、2行目の ACTIVE POSITION 0という部分である
この部分は正しくは ACTIVE BEFORE INSERT OR UPDATE POSITION 0でなくてはならない
信用してこのまま流してしまうと、エラーとなりトリガーが作成されないままとなってしまう

プログラム自体を直すことは今となってはもう無理なので、手作業で対処するしかない




Build a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: