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)