問題は、最初の実行可能ステートメントとして、データベースから読み取れるかどうかを確認したいということです。できない場合は、電話MessageDlg
してその旨を説明し、Halt;
.
ただし、ダイアログを閉じた後も、tak マネージャーにアプリケーションが表示されます (アプリケーションを停止して再実行すると、同じことが起こります)。
私が間違っていることは何ですか?
Global.ADQuery1 は、AnyDac データベース アクセス コンポーネントです。IP アドレスで d/b にアクセスします。PC のアドレスを d/b アドレスに設定すると、コードは正常に動作し、IP アドレスを変更すると報告された問題が発生します (したがって、d/b にアクセスできず、例外がスローされます)。
procedure TMainForm.FormCreate(Sender: TObject);
begin
try
Global.ADQuery1.Open('SHOW DATABASES');
except
On E: Exception do
begin
MessageDlg('Database access problem', mtError, [mbOK], 0);
Halt;
end;
end;
[更新] IDEで実行すると、キャッチした後
(EMySQLNativeException) : "[AnyDAC][Phys][MySQL] Can't connect to MySQL server on '10.21.18.211' (10060)"
-をキャッチしEIdWinSockStubError either the program has not called wsastartup or wsastartup failed
ますが、それがどのようにスローされるかはわかりません...Application.Terminate
呼び出しはメインフォームの可能性があると思いますがFormClose
、これは私のIndyコンポーネントでは何もしませんが、親フォームが破棄されると、その子はあまりにも。
【追加更新】
私のTMainForm.FormCreate
今だけ言う
Sleep(1000);
PostMessage(Handle, UM_PROGRAM_START, 0, 0);
そして、すべてのコードを、それを処理する関数の stat に移動しました。その時にすべてが生まれるのではないでしょうか?では、なぜ私の Indy コンポーネントが例外をスローするのでしょうか?
PostMessage()
たぶん、[application].pasの後に を入れる必要がありApplication.Run();
ますか?
(余談:1)他の人は一般的にどのようにアプリケーションの開始をこの方法で処理しますか? 2) アプリケーションのスケルトンを持っている人はいますか? システムトレイへの最小化を処理するオプション、1つのインスタンスのみを許可するオプション、最近のファイルメニューなどを作成することを考えていました-ただし、別の質問としては良いかもしれません