AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi array of records mit Daten aus SQL Query füllen
Thema durchsuchen
Ansicht
Themen-Optionen

array of records mit Daten aus SQL Query füllen

Ein Thema von Gushiken · begonnen am 27. Nov 2008 · letzter Beitrag vom 27. Nov 2008
 
nahpets
(Gast)

n/a Beiträge
 
#4

Re: array of records mit Daten aus SQL Query füllen

  Alt 27. Nov 2008, 11:55
Hallo,

je nach Datenbank kann ein len:=RecordCount lange dauern, da zuweilen die Datensätze wirklich gezählt werden, d.h. die Datenmenge wird einmal durchlaufen (egal ob auf dem Client oder dem Server). Einige Datenbanken liefern die ersten Sätze der Ergebnismenge ja schon aus, bevor das gesamte Ergebnis der Abfrage feststeht, d. h.: Du liest die ersten Daten schon, während die Datenbank noch mit dem Ermitteln der Ergebnismenge beschäftigt ist. Möchtest Du nun wissen, mit wievielen Sätzen Du zu rechnen hast, muss die Datenbank die Ergebnismenge vollständig "zusammen" haben.
Ob's bei Dir so ist, kann ich nicht sagen.

Versuche mal vorher ein Select Count(*) entsprechend Deinem Select zu machen und nehme für len diesen Wert, statt RecordCount.

Der Record besteht sicherlich nicht nur aus nachname. Wieviel Byte an Daten hat ein Record, wieviel gibt das mal 100000? Reicht der Arbeitsspeicher oder muss ausgelagert werden. Dann wird es immer deutlich langsamer. Wenn's wirklich an der Laune des Computers und der laufenden Programme liegt, dann sorg' mal für mehr Arbeitsspeicher. Schau Dir im Taskmanager mal die "Speicherentwicklung" beim Programmstart an und eventuell auch mal die Grafiken über CPU-Belastung und Speichernutzung.

Warum so?
Delphi-Quellcode:
  len:=0;
  while len<RecordCount do
  begin
    with personenArray[len] do
    begin
      nachname:=Fields.Fields[0].AsString;
    end;
    next;
    len:= len+1;
  end;
Wäre eventuell auch
Delphi-Quellcode:
  first;
  len:=0;
  while not EoF do
  begin
    with personenArray[len] do
    begin
      nachname:=Fields.Fields[0].AsString;
    end;
    next;
    len:= len+1;
  end;
möglich?
Ich weiß nicht, wie RecordCount intern funktioniert, ob es wirklich nur ein Wert ist, der einmalig zugewiesen wird oder eine Funktion im Getter, die bei jedem Zugriff die Anzahl der Datensätze ermittelt. Eine Alternative könnte also sein:
Delphi-Quellcode:
// Funktion
with query do
begin
  with sql do
  begin
    clear;
    add('<SELECT Anweisung>');
  end;
  open;
  // first; // bei open sollte man schon auf dem ersten Satz stehen.
  satzzahl := RecordCount;
  setLength(personenArray,satzzahl);
  len:=0;
  while len < satzzahl do
  begin
    with personenArray[len] do
    begin
      nachname:=Fields.Fields[0].AsString;
    end;
    next;
    Inc(len);
  end;
end;
  Mit Zitat antworten Zitat
 


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 03:34 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