2017-01-24 4 views
-2

を表示するために失敗した:創造のアプリケーションが実行されるが、時にはこれは、プロジェクトのソースである

Application.Initialize; 
    Application.MainFormOnTaskbar := False; 
    Application.ShowMainForm := False; 
    Application.CreateForm(TMain_Form, Main_Form); 
    Application.CreateForm(TData_Module, Data_Module); 
    Application.CreateForm(TForm5, Form5); 
    Login; 
    Application.Run; 

注文がある: Main_Form、Data_Module、Form5

Uniconnectionのタイムアウトは30秒です。

私はSQL Serverに接続しています。

そして、この私は私のMainFormを中に持っている:

procedure Login; 
begin 
    with TUniConnectDialog.Create(nil) do 
    try 
    try 
     Application.MainForm.Hide; 
     if not Data_Module.UniConnectDialog1.Execute then 
     Application.Terminate 

     else 
     Application.MainForm.Show 
    finally 
     Free; 
    end; 
    except 
    on E : Exception do begin 
     ShowMessage('Exception class name = '+E.ClassName); 
     ShowMessage('Exception message = '+E.Message); 
    end; 
    end; 
end; 

そして、まだ、時々私の接続ダイアログが表示するために失敗し、アプリケーションがそれを終了するには、Windowsのタスクマネージャを使用する必要がbackground.Iで静かに を実行します。

私はユーレカを使ってデバッグしようとしましたが、エラーが表示されません。 アプリケーションは実行されますが、表示されません。 これは10件のうち3件で発生する可能性があります。 ここで私は何が間違っているのか把握できません。

編集:

procedure Login; 
begin 
with Data_Module.UniConnectDialog1.Create(nil) do 
     try 
     Application.MainForm.Hide; 
     if not Data_Module.UniConnectDialog1.Execute then 
     Application.Terminate 

     else 
     Application.MainForm.Show 
    finally 
    // Free; 
    end; 
    end; 

EDIT 2:これはどちらか動作しません。

+0

2つのUniConnectDialogオブジェクトが使用されているようです。それは意図的なのでしょうか?また、あなたは効果的に例外を飲み込んでいるので、私はユーレカがそれをどのように扱うのか分かりません。ShowMessage私はショーをメインフォームの子として隠していると思います。例外ハンドラをコメントアウトし、失敗したかどうかを確認します。私はまた、これがエラーをより明確にするかどうかを確認するためにメインフォームを隠さないようにします。 – Dsm

+0

@Dsm UniConnectDialogは1であるはずです。 – user763539

+0

確かに 'TUniConnectDialog.Create(nil)do'と' 'Data_Module.UniConnectDialog1.Execute then'は2つの異なるインスタンスを参照していますか? –

答えて

0

これは完全な解決策ではありませんが(言いにくいかもしれませんが)、主な質問の編集でエラーを修正します。コメントではできませんでしたが、残念です。

procedure Login; 
begin 
    // with Data_Module.UniConnectDialog1.Create(nil) do 
    // 1) Don't use 'with' - it just creates ambiguity 
    // 2) You probably don't need to create the dialog 
    // 3) If you do the format should be: 
    // Data_Module.UniConnectDialog1 := TUniConnectDialog.Create(???) 
     try 
     Application.MainForm.Hide; 
     if not Data_Module.UniConnectDialog1.Execute then 
     Application.Terminate 

     else 
     Application.MainForm.Show 
    finally 
    // Free; 
    end; 
    end;  
関連する問題