Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

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

AW: MyDac "show status" antwort abhohlen

  Alt 5. Jan 2014, 12:36
Mal ganz abgesehen davon, dass man solche Operationen nicht mit Komponenten (MyQuery1 , MyQuery2 ) machen sollten, die man auf eine Form klatscht ist es auch besser diese Funktionen aufzuteilen.
Delphi-Quellcode:
  procedure GetDatabaseNames( AConnection : TMyConnection; AResult : TStrings );
    var
      LQuery : TMyQuery;
      LField : TField;
    begin
      AResult.BeginUpdate;
      try

        AResult.Clear;

        LQuery := TMyQuery.Create( nil );
        try
          LQuery.SQL.Text := 'SHOW DATABASES';
          LQuery.Connection := AConnection;
          LQuery.Open;
          try
            LField := LQuery.FieldByName( 'Database' );

            while not LQuery.EOF do
              begin
                AResult.Add( LField.AsString );
                LQuery.Next;
              end;
          finally
            LQuery.Close;
          end;
        finally
          LQuery.Free;
        end;

      finally
        AResult.EndUpdate;
      end;
    end;

  procedure GetTableNames( AConnection : TMyConnection; const ADatabaseName : string; AResult : TResult );
    var
      LQuery : TMyQuery;
      LField : TField;
    begin
      AResult.BeginUpdate;
      try

        AResult.Clear;

        LQuery := TMyQuery.Create( nil );
        try
          LQuery.SQL.Text := 'SHOW TABLES FROM ' + ADatabaseName;
          LQuery.Connection := AConnection;
          LQuery.Open;
          try
            LField := LQuery.Fields.Fields[0];

            while not LQuery.EOF do
              begin
                AResult.Add( LField.AsString );
                LQuery.Next;
              end;
          finally
            LQuery.Close;
          end;
        finally
          LQuery.Free;
        end;

      finally
        AResult.EndUpdate;
      end;
    end;

  procedure GetDatabaseTableNames( AConnection : TMyConnection; AResult : TStrings );
    var
      LDatabases : TStringList;
      LDatabase : string;
      LTables : TStringList;
      LTable : string;
    begin
      LDatabases := nil;
      LTables := nil;
      AResult.BeginUpdate;
      try
        AResult.Clear;

        LDatabases := TStringList.Create;
        LTables := TStringList.Create;

        GetDatabaseNames( AConnection, LDatabases );

        for LDatabase in LDatabases do
          begin
            GetTableNames( AConnection, LDatabase, LTables );

            for LTable in LTables do
              begin
                AResult.Add( Format( '%s.%s', [LDatabase, LTable] ) );
              end;
          end;

      finally
        AResult.EndUpdate;
        LTables.Free;
        LDatabases.Free;
      end;
    end;

  procedure TForm1.Button1Click( Sender : TObject );
    begin
      GetDatabaseTableNames( MyConnection1, Memo1 );
    end;
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 ( 5. Jan 2014 um 12:41 Uhr)
  Mit Zitat antworten Zitat