zu 1) DisableControls bzw EnableControls ist eine Methode von TDataSet.
Das ständige Neuzeichnen der Bildschirmnanzeige von datensensitive Steuerlemeneten (DBGrid. DBEdit, etc) bei grossen Datenmengen ist zeitaufwändig; DisbaleControls 'friert' die Anzeige ein und nach dem Aktualisieren (in deinem Fall das Wechseln der Tabelle) wird durch EnableControls die Anzeige auf den neuesten Stand gebracht.
zu 2)
Delphi-Quellcode:
procedure TfrmMain.TreeViewChange(Sender: TObject; Node: TTreeNode);
var cnt: Integer;
begin
if TreeView.Selected.IsFirstNode then exit
else
begin // angeclickte Tabelle öffnen und Daten in Grid zeigen
SelectTable(TreeView.Selected.Text); // neuer TableName
//--Anzeige im Grid 'einfrieren
DBGrid1.DataSource.DataSet.DisableControls;
{oder vereinfacht:}
tTable.DisableControls;
try
tTable.Close; // active Table schließen
tTable.IndexName := ''; // falls da noch was ist
//--alle Indizes löschen
for cnt := sIndexList.Count -1 downto 0 do
tTable.DeleteIndex(sIndexList[cnt]); // index aus table
sIndexList.Clear; // stringliste komplett leeren
tTable.IndexDefs.Update; // indexdefinition aktualisieren
tTable.StoreDefs := False; //speichern der definitionen verhindern
tTable.TableName := TreeView.Selected.Text; // neue Tabelle
tTable.Open;
finally
DBGrid1.DataSource.DataSet.EnableControls;
{oder vereinfacht:}
tTable.EnableControls;
end;
Label1.Caption:=TreeView.Selected.Text;
iRecordCount.Caption := IntToStr(tTable.RecordCount); // Datensätze zählen und anzeigen
end;
end;
Ich habe die Löschroutine stark vereinfacht (wie ich es ja schon mal vorgeschlagen habe
)