2017-01-24 5 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; 

И все же, иногда мой диалог подключения не может показать и приложение работает молча в background.I должны использовать диспетчер задач Windows, чтобы закончить его.

Я попытался использовать eureka для его отладки, но он не смог показать мне какую-либо ошибку. Приложение выполняется, но не отображается. Это происходит, возможно, в 3 из 10 случаев. Теперь я не могу понять, что я делаю неправильно здесь.

Edit:

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

Возможно, вы используете два объекта UniConnectDialog. Это намеренно? Кроме того, вы эффективно глотаете исключение, поэтому я не уверен, как эта эврика справится с этим, и ShowMessage, я думаю, показывает как ребенок основной формы, которая скрыта, поэтому вы их не увидите. Я бы попробовал комментировать обработчик исключений и посмотреть, не сработает ли он. Я также попытался бы не скрывать основную форму, чтобы убедиться, что это делает ошибку более ясной. – Dsm

+0

@Dsm UniConnectDialog должен быть одним. – user763539

+0

Несомненно 'с TUniConnectDialog.Create (nil) do' и' if not Data_Module.UniConnectDialog1.Execute then' ссылаются на два разных экземпляра, нет? –

ответ

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;