データベースとの接続確認


studio-take  2016-03-15 07:02:07  No: 48086

アプリケーションの起動時に自動的にサーバーに接続処理を行っていますが、
connectに失敗したときの処理に頭を悩ませています。

try
  TIBDatabase.Connected := True;
except
  ShowMessage('データベースに接続できません');
end;

だと、サーバーが見つからないとしばらく反応待ちになります。
また、復帰した後もアクションリストの手続きが不能になってたりします。
早急にオンライン・オフラインを判断し、機能不全を防ぎたいのですが、
皆さんはどういう処理を入れているのでしょうか?

アドバイスをお願いします。


DEKO  2016-03-15 16:37:59  No: 48087

とりあえずサーバーに PING を打つとかですかねぇ...。

但し、Indy で Ping を打つには管理者権限が必要になりますので、
IcmpSendEcho() を使った方がいいと思います。

https://support.microsoft.com/ja-jp/kb/170591
http://izawa-web.com/xping/xping.html
http://ht-deko.com/delphiforum/?vasthtmlaction=viewtopic&t=1055.0

> TIBDatabase.Connected := True;

Interbase / Firebird (IBX) ならば、

IBDatabase.TestConnected()

を使えば若干速いかもですね。


studio-take  2016-03-16 08:05:28  No: 48088

??<    663. ]
Solved: on

回答ありがとうございます。

おっしゃるとおり、FirebirdをIBXで使用しています。
TestConnectedの方が早そうですが、IndyのPingも覚えておいた方が良さそうなので、チャレンジしてみます。

ありがとうございました。


DEKO  2016-03-16 22:30:39  No: 48089

ちなみに fbconverter の接続チェックは、
IBX の TestConnected() と同じ事をやっています (Zeos ですけれど)。
https://github.com/tomneko/fbconverter


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加