AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank

Ein Thema von Thomas2017 · begonnen am 5. Okt 2017 · letzter Beitrag vom 8. Okt 2017
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#21

AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank

  Alt 7. Okt 2017, 12:40
Bei MS Access gabs über ADO die Option Serverseitige Curser zu verwenden damit bei einer TTable-Komponenten nicht der komplette Tabelleninhalt von der Access-Engine nochmal in die Delphi-Teil der Anwendung kopiert wurde. Evtl. gibt das auch bei Interbase.
Da es sich um den Embedded-Server handelt (eine DLL), spielt sich das Ganze im Adressraum der Anwendung ab. Da ist es vollkommen egal, ob der Server die Datenbank in den Speicher lädt, denn der Server ist in diesem Fall die Anwendung selbst.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#22

AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank

  Alt 7. Okt 2017, 12:45
Ja, aber könnte es dann nicht so sein, dass sowohl die DLL, als auch die DataSet-Komponente die gesamten Daten separat im Speicher vorhalten?

Damit hätte doch dann die Anwendung die Daten zweimal im Speicher?

Oder ein anderer Ansatz:

Statt mit 'nem DataSet und Append, 'ne Query nehmen. Das könnte dann sinngemäß ungefähr (ungetestet) so aussehen:
Delphi-Quellcode:
  AssignFile(F, 'C:\daten.txt');
  reset(F);
  form1.Query1.SQL.Clear;
  form1.Query1.SQL.Add('EXECUTE BLOCK BEGIN');
  repeat
    begin
      readln(F, temp);
      x := x + 1;
      form1.Query1.SQL.Add(Format('insert into tabellenname (Name) Values (%s);',[QuotedStr(temp)]));
      // Jeweils 1000 Namen "am Stück" in die Tabelle einfügen.
      // Statt 1000 ggfls. einen angepassten größeren oder kleineren Wert nehmen.
      if x Mod 1000 do begin
        form1.Query1.SQL.Add('END');
        form1.Query1.ExecSQL;
        form1.Query1.SQL.Clear;
        form1.Query1.SQL.Add('EXECUTE BLOCK BEGIN');
      end;
    end
  until eof(F);
  if form1.Query1.SQL.Count > 1 then begin
    form1.Query1.SQL.Add('END');
    form1.Query1.ExecSQL;
    form1.Query1.SQL.Clear;
  end;
  CloseFile(f);

  showmessage('...fertig. ' + inttostr(x) + ' Datensätze');

Geändert von nahpets ( 7. Okt 2017 um 13:07 Uhr) Grund: Text um anderen Ansatz ergänzt
  Mit Zitat antworten Zitat
bnreimer42

Registriert seit: 26. Mai 2013
Ort: Erlangen, Franken
126 Beiträge
 
Delphi 12 Athens
 
#23

AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank

  Alt 7. Okt 2017, 13:19
Schönes Beispiel, aber ein Fehler ist da drinnen:

form1.Query1.SQL.Add(Format('insert into tabellenname (Name) Values (%s);',[QuotedStr(temp)])); Da kann mit einem falschen String in der Textdatei Blödsinn passieren.

Besser mit Parametern arbeiten:

Delphi-Quellcode:
form1.Query1.SQL.Add('insert into tabellenname (Name) Values (:ParamX);');
form1.Query1.Params[x]:=temp;
x musst Du halt als Zahl hochzählen.

(Auch ungetestet)
Björn Reimer
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#24

AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank

  Alt 7. Okt 2017, 14:10
Da es sich um den Embedded-Server handelt (eine DLL), spielt sich das Ganze im Adressraum der Anwendung ab. Da ist es vollkommen egal, ob der Server die Datenbank in den Speicher lädt, denn der Server ist in diesem Fall die Anwendung selbst.
Nein, ist es nicht. Auf Server-DLL-Seite kann die DB-Engine noch Optimierungen durchführen um nicht wirklich alles Daten im Speicher halten zu müssen. Werden diese Daten dann komplett im Client-Dataset auf Delphi-Seite der Exe gehalten, ist das nicht mehr möglich.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#25

AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank

  Alt 7. Okt 2017, 19:59
Da ich bisher noch nicht so intensive Bekanntschaft mit embedded Servern hatte, ich meine mich zu erinnern, daß da lokal einige Services laufen, darum bin ich davon ausgegangen, das das Client-Programm zwar auf der selben Maschine aber ansonsten unabhängig von der DB läuft? (z.B. InterbaseServer)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#26

AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank

  Alt 7. Okt 2017, 20:09
Embedded bedeutet, dass die Client-Dll den Serverkern enthält. Keine externen Services usw.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#27

AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank

  Alt 7. Okt 2017, 21:22
Ok, Danke!

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
hstreicher

Registriert seit: 21. Nov 2009
221 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#28

AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank

  Alt 8. Okt 2017, 08:57
Wie ist den die Firebird Datenbank Konfiguriert
- Pagesize
- Buffers DefaultDbCachePages
- werden UDF verwendet
- Forcedwrites
- MaxUnflushedWrites
wo liegt ggf da Temp Verzeichniss und wieviel Platz ist da frei


Pagesize*Buffers ist die Anzahl Bytes die Firebird im Cache vorhält (bei embeded)

Speicherverbrauch bei offenen Transactionen
http://www.firebirdfaq.org/faq118/



mfg Hannes
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 23:32 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