![]() |
Re: Performance verbessern
hi,
hört sich interessant an - ich hab mal danach gesucht - kann aber nicht wirklich was damit anfangen. Zitat:
kannst du mir vllt einen kleinen Anstoss geben - bitte nicht den ganzen code - evtl auch nur erklären - bin ja hier zum lernen ;) abschreiben bringt da nichts. gruß |
Re: Performance verbessern
Hallo,
beim Zugriff auf deine Datenbank muss dein Programm versuchen alle Informationen mit möglichst wenigen Queries zu besorgen. In deinem Fall würde eine einzige Query genügen, was den Ladeprozess ungemein beschleunigen sollte. Informiere dich mal über die GROUP BY Klausel - und zeige mal das Schema (Datenmodell) deiner Datenbank. Grüße vom marabu |
Re: Performance verbessern
hi,
also habe mich nun darüber infomiert - sehe ich es richtig das ich zb die unterkategorien mit group bei sortieren soll, so das das zählen schneller geht? ich habe momentan 4 tabellen,
Delphi-Quellcode:
die zwei tabellen kategorie und unterkat brauche ich momentan eigentlich nicht mehr da ich die werte dieser beiden lokal liegen habe. ist das das was du wolltest?
kategorie
name //namen der kategorien unterkat kat //hauptkategorie -> aus tabelle kategorie unter //name der unterkategorie rezepte name //name des rezepts unterkat //dazu gehörige unterkategorie -> aus tabelle unterkat kategorie //hauptkategorie -> aus tabelle kategorie zutaten kategorie //hauptkategorie -> aus tabelle kategorie unterkat //dazu gehörige unterkategorie -> aus tabelle unterkat name //name des rezepts zutat //name der zutat menge //menge der zutat mass //maß der zutat zubereitung //zubereitung als BLOB gruß |
Re: Performance verbessern
Die lokale Speicherung von Tabllen, bringt m.E. nichts. Wie sehen die Abftagen aus, was soll abgefragt werden?
|
Re: Performance verbessern
hi,
habe nicht die tabellen sondern nur die werte dieser in einer txt und ini datei abgelegt in der hoffnung das es dadurch schneller geht. momentan sieht meine abfrage so aus.
Delphi-Quellcode:
wie oben beschrieben ist das problem das es ziemlich lange braucht alle daten zu laden die aich abfrage.
tv_rezept.Items.BeginUpdate;
try frm_laden.Show; frm_laden.Label1.Caption := 'Lade Datenbank'; Application.ProcessMessages; for i := 0 to namen.Count -1 do begin sqlqrez.Active := False; sqlqrez.SQL.Clear; sqlqrez.SQL.Add('SELECT Count(name) FROM rezepte WHERE kategorie in ("'+namen.Strings[i]+'")'); sqlqrez.Active := True; with tv_rezept.Items do begin t := AddChild(nil,namen.Strings[i] + ' ('+sqlqrez.fieldbyname('Count(name)').AsString+')'); end; for a := 0 to 8 do begin if not (ini.ReadString(namen.Strings[i],'unter'+IntToStr(a),'') = '') then begin unterkat.Add(ini.ReadString(namen.Strings[i],'unter'+IntToStr(a),'')); end; end;//for a := for a := 0 to unterkat.Count -1 do begin sqlqrez.Active := False; sqlqrez.SQL.Clear; sqlqrez.SQL.Add('SELECT Count(name) FROM rezepte WHERE unterkat in ("'+unterkat.Strings[a]+'") AND kategorie in ("'+namen.Strings[i]+'") GROUP BY unterkat'); sqlqrez.Active := True; tv_rezept.Items.AddChild(t,unterkat.Strings[a]+ ' (' + sqlqrez.fieldbyname('Count(name)').AsString +')' ); sqlqrez.Active := False; end;//for a unterkat.Clear; frm_laden.progress.StepBy(10); end;//for i finally tv_rezept.Items.EndUpdate; frm_laden.Close; end; gruß |
Re: Performance verbessern
Meine Frage, war was du abffragen willst und nicht wie du es jetzt macht.
|
Re: Performance verbessern
Liste der Anhänge anzeigen (Anzahl: 1)
ich will in einer treeview meine kategorien mit den dazugehörigen unterkategorien anzeigen - hinter den jeweiligen kategorien und unterkategorien soll in klammen angezeigt werden wieviel rezepte es in dieser kategorie bzw. unterkategorie schon gibt.
damit man sich net durchklicken muss um auf gut glück ein rezept zu finden. klappt auch soweit ganz gut nur soll die geschwindigkeit des ladens verbessert werden. |
Re: Performance verbessern
Dann würde ich das per SQL abfragen:
SQL-Code:
select count( id) from rezepte where kategorie = :kat;
SQL-Code:
select count( id) from rezepte where ukat = :ukat;
|
Re: Performance verbessern
hmm das mache ich doch momentan eigentlich auch oder nicht?
kategorien:
Delphi-Quellcode:
unterkategorien:
sqlqrez.Active := False;
sqlqrez.SQL.Clear; sqlqrez.SQL.Add('SELECT Count(name) FROM rezepte WHERE kategorie in ("'+namen.Strings[i]+'")'); sqlqrez.Active := True;
Delphi-Quellcode:
bei unterkategoriem uss ich die hauptkategorie auch mit anfragen da es zb die unterkategorie grundrezepte in mehreren hauptkategorien gibt.
sqlqrez.Active := False;
sqlqrez.SQL.Clear; sqlqrez.SQL.Add('SELECT Count(name) FROM rezepte WHERE unterkat in ("'+unterkat.Strings[a]+'") AND kategorie in ("'+namen.Strings[i]+'") GROUP BY unterkat'); sqlqrez.Active := True; wenn ich falsch liegen sollte bitte um verbesserung. gruß |
Re: Performance verbessern
Besser wäre aber wie schon erwähnt das ganze parametrisiert zu machen:
Delphi-Quellcode:
sqlkat.SQL.Text := 'SELECT Count(name) FROM rezepte WHERE kategorie = :kat';
sqlukat.SQL.Text := 'SELECT Count(name) FROM rezepte WHERE kategorie = :kat and unterkategorie = :ukat'; ... sqlKat.paramByName('kat').Value := namen.Strings[i]; sqlKat.Open; ... sqluKat.paramByName('kat').Value := namen.Strings[i]; sqluKat.paramByName('kat').Value := unterkat.Strings[a]; sqluKat.Open; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:17 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