Thema: Delphi Indexfehler ??

Einzelnen Beitrag anzeigen

raiguen
(Gast)

n/a Beiträge
 
#15

Re: Indexfehler ??

  Alt 2. Dez 2007, 13:33
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 )
  Mit Zitat antworten Zitat