Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Interbase SQL-Dialect 1/3 - Problem

  Alt 18. Dez 2013, 09:29
Wenn du das etwas umstrukturierst, dann wird das auch übersichtlicher und besser dokumentiert:

In TForm3 folgendes rein:
Delphi-Quellcode:
  // Wir wollen etwas in die StatusBar schreiben
  procedure TForm3.SetStatus( const AText : string );
    begin
      StatusBar.SimpleText := AText;
      StatusBar.Refresh;
    end;

  procedure TForm3.SpeedButton9Click( Sender : TObject );
    begin
      EditDBPath.Text := g_DBPfad + '\My_IB_DB.gdb';
      // Das DataModule kümmert sich um die Anlage der Datenbank
      // Um StatusMeldungen an die Form zu liefern, nehmen wir die Methode SetStatus als Callback ;o)
      DataModule2.CreateDataBase( EditDBPath.Text, EditUserName.Text, EditPassword.Text, SetStatus );
    end;
In TDataModule2 werden die Methoden CreateDatabase und CreateTables angelegt
Delphi-Quellcode:
  // Eine Callback-Methode für Status-Meldungen
  type
    TStatusCallback = procedure( const AStatus : string ) of object;

  procedure TDataModule2.CreateTables( StatusCallback : TStatusCallback );
    begin
      // whatever
    end;

  procedure TDataModule2.CreateDataBase( const DBPath, Username, Password : string; StatusCallback : TStatusCallback );
    const
      cCreateTxt = ' %d. Versuch: Datenbank wird erstellt...';
      cReadyTxt = 'Datenbank wurde erstellt!';
      cFailureText = 'Datenbank konnte nicht erstellt werden!';
    begin
      if FileExists( DBPath )
      then
        // Keine Meldung ausgeben, sondern eine Exception
        // Dadurch kommt die Meldung eh ;o)
        raise Exception.CreateFmt( 'Die Datenbank "%s" existiert schon', DBPath );

      Screen.Cursor := crHourGlass;
      try
        IBD.LoginPrompt := FALSE;
        IBD.Connected := FALSE;
        IBD.Params.Clear;

        // StatusMeldung (Callback-Methode aufrufen)
        StatusCallback( Format( cCreateTxt, [1] ) );

        try

          IBD.DatabaseName := DBPath;
          IBD.Params.Add( Format( 'USER "%s"', [Username] ) );
          IBD.Params.Add( Format( 'PASSWORD "%s"', [Password] ) );
          IBD.SQLDialect := 1;
          IBD.Params.Add( 'PAGE_SIZE 4096' );
          IBD.Params.Add( 'DEFAULT CHARACTER SET ISO8859_1' );
          IBD.CreateDataBase;

          // StatusMeldung (Callback-Methode aufrufen)
          StatusCallback( cReadyTxt );

          // Tables_anlegen; // Tabellen werden angelegt
          CreateTables( StatusCallback );

        except
          on E : Exception do
            begin
              if FileExists( DBPath )
              then
                DeleteFile( DBPath );

              // StatusMeldung (Callback-Methode aufrufen)
              StatusCallback( cFailureText );

              raise;
            end;
        end;

      finally
        Screen.Cursor := crDefault;
      end;
    end;
Und damit ist in TForm3.SpeedButton9Click auf einen Blick klar, was da passiert -> Es wird eine Datenbank angelegt (Documentation by Code). Vorher musste man sich erst durch den Quellcode wühlen, um das festzustellen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (18. Dez 2013 um 09:37 Uhr)
  Mit Zitat antworten Zitat