Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MyDac "show status" antwort abhohlen (https://www.delphipraxis.net/178370-mydac-show-status-antwort-abhohlen.html)

DelTurbo 4. Jan 2014 09:35

Datenbank: MySql • Version: 5.x • Zugriff über: MyDac

MyDac "show status" antwort abhohlen
 
Hi,
ich brauche mal eine kleine Hilfe. Ich hab nun MyDac. Die Demo die bei ist, ist sehr groß. Da was zu finden scheint nicht einfach zu sein.

Ich habe auf der Form nun TMyConnection, TMySQLMonitor und TMyQuery. Nun habe ich folgendes gemacht, um erstmal reinzukommen.

Delphi-Quellcode:
    MyQuery1.SQL.Add('show status;');
    MYQuery1.ExecSQL;
Nun finde ich leider nicht, wo bzw. wie ich die antwort abhohlen kann. Wenn jemand so nett wäre um mir mit einem 3zeiler aushelfen könnte, wäre ich wahnsinnig dankbar.

Danke im voraus

Sir Rufo 4. Jan 2014 09:45

AW: MyDac "show status" antwort abhohlen
 
Delphi-Quellcode:
MyQuery1.Open
?

RWarnecke 4. Jan 2014 09:46

AW: MyDac "show status" antwort abhohlen
 
Probiere mal folgendes :
Delphi-Quellcode:
MyQuery1.SQL.Clear;
MyQuery1.SQL.Add('SHOW Status;');
MyQuery1.Open;
while not MyQuery1.Eof do
begin
  Memo1.Lines.Add(MyQuery1.FieldsByName('VariableName').AsString + ' = ' + MyQuery1.FieldsByName('Value').AsString);
  MyQuery1.Next;
end;
MyQuery1.Close;
(Nur so runtergetippt.)

Nun sollten Dir alle Werte in einem Memo angezeigt werden.

DelTurbo 4. Jan 2014 09:59

AW: MyDac "show status" antwort abhohlen
 
@RWarnecke,
das ist schonmal ein Anfang. Ich danke dir. Bei FieldByName ist nur das s zuviel. Nun muss ich nur noch finden (Anzahl ist 25 laut MyQuery1.FetchRows) wie ich an die Feldnamen komme.

Vielen dank erstmal :thumb:

EDIT:
Aus 'VariableName' noch 'Variable_Name' machen, dann rennt deine demo einwanfrei. Nochmals vielen dank!

Sir Rufo 4. Jan 2014 10:18

AW: MyDac "show status" antwort abhohlen
 
Jedes DataSet lässt dich durch die Felder iterieren um z.B. an die Feldnamen zu kommen.

Einfach mal schauen nach Delphi-Referenz durchsuchenTDataSet.Fields -> Delphi-Referenz durchsuchenTFields

DelTurbo 4. Jan 2014 10:27

AW: MyDac "show status" antwort abhohlen
 
Danke. Ich habe bisher immer mit DirectMySql etwas gemacht. Deswegen stand ich grade etwas wie "Ochse vorm Berg".

Aber da DirectMySql nur bis SSL Verion 0.9.6 rennt, wollte ich umsteigen. Und Deddy hat mir den Tipp mit Devart gegeben.

Da muss ich mich erstmal "reinfummeln". Da ich aber nun die "Grunsätzlichen" sachen kenne, wird wohl 1% von dem sein was MyDac kann, geht es nun aufwärts.

Das ist einfach frustrierend wenn man Stunden lang etwas versucht bzw. sucht und findet es nicht.

Nochmal danke

DelTurbo 5. Jan 2014 10:51

AW: MyDac "show status" antwort abhohlen
 
Hallo, ich habe noch eine frage. Das MyQuery.Open, braucht man das? Wenn SQL leer ist, gibt es einen fehler. Aber wenn ich etwas in SQL drin habe, kann ich sofort das Execute ohne open machen. Ich habe mal eine kleine schleife gemacht, die mir alle Datenbanke gibt, und dann alle Tabellen ausliest.

Wäre nett wenn mir jemdand sagen könnte ob man das so lassen kann, oder ob ich zu kompliziert gedacht habe.

Danke im voraus

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  line   :String;
begin
    MyConnection1.Connect;
    MyQuery1.SQL.Clear;
    Memo1.Clear;
    MyQuery1.SQL.Add('SHOW DATABASES;');
    MyQuery1.Open;
    MyQuery1.First;
//    MyQuery2.Open;
    while not MyQuery1.Eof do
    begin
      line:=MyQuery1.FieldList.Fields[0].AsString;
      Memo1.Lines.Add(MyQuery1.FieldList.Fields[0].AsString);
      MYQuery2.SQL.Clear;
      MyQuery2.SQL.Add('SHOW TABLES FROM '+line+';');
      MyQuery2.Execute;
      while ( not MyQuery2.Eof ) do begin
        Memo1.Lines.Add(MyQuery2.FieldList.Fields[0].AsString);
        MyQuery2.Next;
      end;
      MyQuery1.Next;
    end;
    MyQuery1.Close;
    MyQuery2.Close;
    MyConnection1.Disconnect;
end;

haentschman 5. Jan 2014 11:26

AW: MyDac "show status" antwort abhohlen
 
Moin...

Grundsätzliches:
1. Open führt einen Befehl aus und bekommt eine Ergebnismenge zurück.
2. Execute führt nur einen Befehl aus.

...jetzt müßtest du deinen Fehler auch finden :zwinker:

DelTurbo 5. Jan 2014 11:32

AW: MyDac "show status" antwort abhohlen
 
Die frage die ich mir gestellt habe, ist, dauert das ewige Open/Close nicht zu lange? Zumal das ja denn in einer Schleife wäre.

Sir Rufo 5. Jan 2014 11:36

AW: MyDac "show status" antwort abhohlen
 
Mal ganz abgesehen davon, dass man solche Operationen nicht mit Komponenten (
Delphi-Quellcode:
MyQuery1
,
Delphi-Quellcode:
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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz