AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQL Update-Befehl viel zu langsam

SQL Update-Befehl viel zu langsam

Ein Thema von Perlsau · begonnen am 24. Dez 2013 · letzter Beitrag vom 24. Dez 2013
 
Perlsau
(Gast)

n/a Beiträge
 
#1

SQL Update-Befehl viel zu langsam

  Alt 24. Dez 2013, 01:43
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBDac
Moin allerseits,

in einer Firebird-Tabelle befinden sich rund 24.000 Einträge, die ich in einem VirtualTreeview anzeige. Die Tabellen-Spalte MARKIERT nimmt einen Boolean-Wert auf, der den Checkbox-Status repräsentiert. Wenn ich nun im VirtualTreeView alle Einträge markieren möchte (= in allen Checkboxen den Haken setzen), verwende ich diesen SQL-Befehl via SQL-Komponente:
Delphi-Quellcode:
Procedure TDatBankEdit.Vst_MarkAll;
begin
  DatMod.Dsrc_Berufe.Enabled := False;
  DatMod.SQLMain.SQL.Text := 'update BERUFE set MARKIERT = 1';
  DatMod.SQLMain.Execute;
  DatMod.Qset_Berufe.Refresh;
end;
Danach wird VirtualTree neu eingelesen. Das Problem: Wenn ich diesen SQL-Befehl im DB-Manager (IBExpert) eingebe, dauert die Ausführung incl. Commit und Refresh der Anzeige ca. 5 Sekunden. Mache ich das via Delphi, dann vergehen zwischen 17 und 21 Sekunden, wobei das Anzeigen im TreeView weniger als 1 Sekunde benötigt. Seltsamerweise geht das bedingte Update (Toggle) des Feldes ein wenig schneller: zwischen 13 und 16 Sekunden:
Delphi-Quellcode:
Procedure TDatBankEdit.Vst_MarkToggle;
begin
  DatMod.Dsrc_Berufe.Enabled := False;
  DatMod.SQLMain.SQL.Text := 'update BERUFE set MARKIERT = iif((MARKIERT = 0),1,0)';
  DatMod.SQLMain.Execute;
  DatMod.Qset_Berufe.Refresh;
end;
In IBExpert dauert das dagegen auch nur ca. 5 Sekunden. Was kann ich tun, damit ich annähernd die Geschwindigkeit erreiche, die IBExpert drauf hat?

Bevor sich jemand wundert: Der Checkbox-Status wird natürlich deshalb in der DB gespeichert, damit der Anwender das beim nächsten Start wieder zur Verfügung hat. Beim Ändern einzelner Checkboxen im VirtualTree wird natürlich nur der entsprechende Eintrag in der DB aktualisiert und nicht jedesmal alles. Es gibt aber Buttons bzw. Menüeinträge, mit denen man alle, keine oder invertiert markieren kann. Die Markierungen dienen der späteren Auswahl beim Drucken, Exportieren usw.

Crosspost im Delphi-Treff
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz