AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Geschwindigkeit beim auslesen verbessern
Thema durchsuchen
Ansicht
Themen-Optionen

Geschwindigkeit beim auslesen verbessern

Ein Thema von Grumble · begonnen am 9. Feb 2005 · letzter Beitrag vom 9. Feb 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Grumble
Grumble

Registriert seit: 19. Mär 2003
Ort: Dresden
203 Beiträge
 
Delphi 6 Enterprise
 
#1

Geschwindigkeit beim auslesen verbessern

  Alt 9. Feb 2005, 12:29
Datenbank: Firebird • Version: 1.5.1 • Zugriff über: sql
hallo,

also folgendes problem... ich lese aus einer tabelle im moment 6500 datensaetze...
jeder datensatz ist eine zeile mit ; getrennter daten, welche ich dann in ein topgrid schreibe...
mein programm verwaltet projekte die alle solche daten enthalten koennen, wenn ich nun ein projekt mit 6500 daten anzeigen will, dauert es recht lang, wechsle ich aber zu einem projekt mit gar keinen oder wenig daten dauert es immer noch lang,
verlangsamt sich der datenzugriff oder sonst was, je mehr daten in meiner db stehen, weshalb? habe ich wenig daten in meiner db, geht der wechsel zwischen den projekten schnell... hat wer ne idee?

so lese ich aus und schreibe ins grid
Delphi-Quellcode:
// auslesen tabelle asset_data
  c:=0;
  dataexist:=false;
  DM.ZQ.SQL.Clear;
  DM.ZQ.SQL.add('SELECT * FROM ASSET_DATA;');
  DM.ZQ.Open;
  DM.ZQ.First;
  while not DM.ZQ.Eof do
  begin
  if caid = DM.ZQ.Fieldbyname('ASSET_ID').asinteger then
  begin
    dataexist:=true;
    break;
  end;
  dm.ZQ.Next;
  end; //while
if dataexist then
  begin
  DM.ZQ.First;
  while not DM.ZQ.Eof do
  begin
    if caid = DM.ZQ.Fieldbyname('ASSET_ID').asinteger then
    begin
      c:=c+1;
      grd_asset.Rows:=grd_asset.Rows+1;
      s:= DM.ZQ.Fieldbyname('DATA').asString;
      templist:=Tstringlist.create;
      templist.Delimiter:=';';
      templist.DelimitedText:=s;
      if c = 1 then grd_asset.Cols:=templist.Count;
      for i:=1 to templist.Count do
      grd_asset.Cell[i,c]:=templist.Strings[i-1];
    end;
    DM.ZQ.Next;
  end;
  end; //if dataexist
gruss
Grumble

... moege der code mit dir sein ...
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#2

Re: Geschwindigkeit beim auslesen verbessern

  Alt 9. Feb 2005, 12:38
du solltest deine abfrage optimieren, indem du nur datensätze holst die du brauchst, also asset_id=caid!

Delphi-Quellcode:
// auslesen tabelle asset_data
  c:=0;
  dataexist:=false;
  DM.ZQ.SQL.Clear;
  DM.ZQ.SQL.add('SELECT * FROM ASSET_DATA');
  DM.ZQ.SQL.add('where ASSET_ID='+inttostr(caid)); // vorselektieren!
  DM.ZQ.Open;
  if not DM.ZQ.Eof then
    DM.ZQ.First
  else
    exit; // keine daten vorhanden
  while not DM.ZQ.Eof do
  begin
    c:=c+1;
    grd_asset.Rows:=grd_asset.Rows+1;
    s:= DM.ZQ.Fieldbyname('DATA').asString;
    templist:=Tstringlist.create;
    templist.Delimiter:=';';
    templist.DelimitedText:=s;
    if c = 1 then
      grd_asset.Cols:=templist.Count;
    for i:=1 to templist.Count do
      grd_asset.Cell[i,c]:=templist.Strings[i-1];
    DM.ZQ.Next;
  end;
  end; //if dataexist
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Geschwindigkeit beim auslesen verbessern

  Alt 9. Feb 2005, 12:39
Hai Grumble,

da fallen mir zwei Sachen auf in deinem Code.

1) Wofür ist die erste Schleife? Du prüfst doch nur ob im Feld ASSET_ID ein bestimmter Wert vorkommt. Mache das doch gleich in deinem Query:

2) Du erzeugst für jede Zeile aus der Tabelle eine neue TStringList. Das haut dir doch den Speicher voll.

Delphi-Quellcode:
// auslesen tabelle asset_data
  c:=0;
  dataexist:=false;
  DM.ZQ.SQL.Clear;
  DM.ZQ.SQL.add('SELECT * FROM ASSET_DATA WHERE ASSET_id = ' + IntToStr (caid));
  DM.ZQ.Open;
  DM.ZQ.First;
{
  while not DM.ZQ.Eof do
  begin
  if caid = DM.ZQ.Fieldbyname('ASSET_ID').asinteger then
  begin
    dataexist:=true;
    break;
  end;
  dm.ZQ.Next;
  end; //while
  if dataexist then
  begin
  DM.ZQ.First;
}

 templist:=Tstringlist.create;
 try
   templist.Delimiter:=';';
    while not DM.ZQ.Eof do
    begin
// if caid = DM.ZQ.Fieldbyname('ASSET_ID').asinteger then
// begin
        c:=c+1;
        grd_asset.Rows:=grd_asset.Rows+1;
        s:= DM.ZQ.Fieldbyname('DATA').asString;
        templist.DelimitedText:=s;
        if c = 1 then grd_asset.Cols:=templist.Count;
        for i:=1 to templist.Count do
          grd_asset.Cell[i,c]:=templist.Strings[i-1];
// end;
    DM.ZQ.Next;
  end;
 finally
   templist.Free;
 end;
// end; //if dataexist
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Grumble
Grumble

Registriert seit: 19. Mär 2003
Ort: Dresden
203 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: Geschwindigkeit beim auslesen verbessern

  Alt 9. Feb 2005, 12:43
ja richtig ... die stringlist ..
weshalb bau ich hier if bedingungen ein wenn ueber query geht naja ich hab ja erst angefangen mit dem sql kram ...

super danke euch fuer die tips
gruss
Grumble

... moege der code mit dir sein ...
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Geschwindigkeit beim auslesen verbessern

  Alt 9. Feb 2005, 12:47
Kleiner Nachtrag:

Das müsste doch eigentlich so aussehen:
Delphi-Quellcode:
.
.
        for i:=1 to templist.Count -1 do // Der Index geht von 0 bis count -1
          grd_asset.Cell[i,c]:=templist.Strings[i-1];
.
.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Grumble
Grumble

Registriert seit: 19. Mär 2003
Ort: Dresden
203 Beiträge
 
Delphi 6 Enterprise
 
#6

Re: Geschwindigkeit beim auslesen verbessern

  Alt 9. Feb 2005, 12:49
deswegen aber
grd_asset.Cell[i,c]:=templist.Strings[i-1]; i-1
gruss
Grumble

... moege der code mit dir sein ...
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Geschwindigkeit beim auslesen verbessern

  Alt 9. Feb 2005, 12:51
Ups. Stimmt. Aber es ist verwirrend es so zu machen. Ich würde das immer in der Schleife angeben. Dann sieht jeder der den Code list wast Du machst.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#8

Re: Geschwindigkeit beim auslesen verbessern

  Alt 9. Feb 2005, 12:51
Übrigens ist es generell schlecht den Stern * zu nehmen.

auf PHP-FAQ kann man nachlesen, warum nicht.
Stattdessen sollte man die Felder holen, die man braucht.

air
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Benutzerbild von Grumble
Grumble

Registriert seit: 19. Mär 2003
Ort: Dresden
203 Beiträge
 
Delphi 6 Enterprise
 
#9

Re: Geschwindigkeit beim auslesen verbessern

  Alt 9. Feb 2005, 12:54
von daher hast du sicher recht, ich habs mir dummerweise andersrum angewoehnt...

koennte es evtl. auch noch sein dass das anfuegen einer reihe ans grid die sache verlangsamt? kann man die anzahl der datensaetze wo where asset_ID= caid ist so auch noch schnell rausbekommen, dann koennt ich die gridzeilenanzhal vorher festlegen, vielleicht bringt das auch noch mal geschwindigkeit...
gruss
Grumble

... moege der code mit dir sein ...
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#10

Re: Geschwindigkeit beim auslesen verbessern

  Alt 9. Feb 2005, 13:01
Hallo Grumble,

versuchs mal mit DM.ZQ.RecordCount Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz