Statusfenster bei ZConnect

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
gekd1407
Beiträge: 10
Registriert: Sa 17. Aug 2013, 22:09
OS, Lazarus, FPC: Win10/11pro 64Bit (L 2.2.6 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Marl

Statusfenster bei ZConnect

Beitrag von gekd1407 »

Hallo,
ich ein Problem bei der Darstellung eines Statusfenster beim Aktivieren von ZConnect zum MSSQL-Server...

Gedacht ist, das ein Fenster mit dem Status "Verbindung wird geöffnet" angzeigt wird, wenn die Verbindung
zum SQLServer aktiviert wird. Das finde ich hilfreich, wenn z.B. der Server nicht erreichbar ist. Im diesem Fall
sieht der User nichts bis zum Timeout mit der Fehlermeldung und kann nicht erkennen, ob das Programm
noch läuft...

Zur Info: Unit2 das Statusfenster, Unit3 das DataModule mit ZConnection.

Wenn "ShowMessage('Pause'); //zum Test, ob Fenster geht" in Quelltest ist wird das Fenster angezeit...
Wenn nicht, ist kein Fenster sichtbar. Erst wenn die Fehlermeldung kommt und "Form2.Close; //nicht vorhanden, wird das Fenster beim Öffnen der Message angezeigt ".

Als ob Form2.Show nicht schnell genug ist und DataModule1.ZConnection1.Connect die Anzeige stoppt.

Auch ein "DataModule1.ZConnection1.Connect" in Form2.OnSchow brachte keine Änderung.

Hat jemand einen Ansatz zur Lösung?

Gruß
Karsten

Code: Alles auswählen

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,
  Unit2, Unit3;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.show;
  ShowMessage('Pause');  //zum Test, ob Fenster geht
                                           //with DataModule1.ZConnection1 do
  begin
    if Connected then Disconnect;
    HostName        := 'Server\SQLEXPRESS';
    Database        := 'Database';
    User            := 'User';
    Password        := 'Password';
    Protocol        := 'FreeTDS_MsSQL>=2005';
    LibraryLocation := 'sybdb.dll';
  end;
  try
    DataModule1.ZConnection1.Connect;
  except
    on e:exception do
      begin
        Form2.Close;   //nicht vorhanden, wird das Fenster
                               //beim Öffnen der Message angezeigt
        ShowMessage(e.Message);
        Application.Terminate;
      end;
  end;
  Form2.Close;
end;

end.

Benutzeravatar
theo
Beiträge: 10499
Registriert: Mo 11. Sep 2006, 19:01

Re: Statusfenster bei ZConnect

Beitrag von theo »

Probier mal so, damit die event queue direkt abgearbeitet wird.

Code: Alles auswählen

begin
  Form2.show;
  Application.ProcessMessages;
  ...
  

charlytango
Beiträge: 845
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Statusfenster bei ZConnect

Beitrag von charlytango »

ich verwende für solche Szenarien eine Splashscreen in der der jeweilige Status der Programminitialisierung angezeigt wird.
Die SplashScreen wird in der LPR Datei erzeugt und von der Initialisierungsprozedur über eine Calback-Funktion mit Meldungen gefüttert.

Code: Alles auswählen

begin
  Application.Scaled:=True;
  RequireDerivedFormResource := True;
  Application.Initialize;
  //Application.Title:='name of your project';
  frmSplashScreen := TfrmSplashScreen.Create(Application);
  try
    frmSplashScreen.Show;

    frmSplashScreen.Update;
    Application.ProcessMessages; // to be sure to show the splash
    MyGlobalInit;                // initializes all programm settings and SQL Connections.
    //Sleep(300);             // Or a delay command.

    Application.CreateForm(TfrmMain, frmMain);  //Create and show Main Form
    frmSplashScreen.Hide;
  finally
    frmSplashScreen.Free;
  end;
  Application.Run;
end. 
Wenn wenig zu initialisieren ist und die SQL Verbindung schnell zustande kommt ist die Splashscreen oft schneller wieder geschlossen als man sie wahrnehmen kann.
Deswegen hat sie eine Mindestdauer für die Anzeige eingebaut. Der Benutzer sieht nur die Splashscreen und wird idealerweise darüber informiert was gerade passiert.

gekd1407
Beiträge: 10
Registriert: Sa 17. Aug 2013, 22:09
OS, Lazarus, FPC: Win10/11pro 64Bit (L 2.2.6 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Marl

Re: Statusfenster bei ZConnect

Beitrag von gekd1407 »

Hallo,

Danke für den Tips.

@theo:
Dein Lösungsvorschlag klappt.

@charlytango:
Diese Lösung konnte ich noch nicht testen.
Das werde ich aber noch tun.

Gruß
Karsten

Antworten