Announcement

Collapse
No announcement yet.

Speicherproblem bei Datenexport

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Speicherproblem bei Datenexport

    Hallo, brauche dringend Hilfe!

    Ich möchte Daten aus einer Interbase-Datenbank (Vers. 6 beta) in einen XML-Katalog exportieren. Hierzu durchlaufe ich die Tabellen (mit while not IBTable1.eof do ... IBTable1.next) und schreibe dann die Daten gemäß XML-Syntax in ein Textfile.

    Beschränke ich die Daten funktioniert alles super. Nehme ich jedoch einen größeren Datenbestand kommt bei ca. 5 MB Dateigrösse die Fehlermeldung "Zu wenig Arbeitsspeicher". Hier habe ich dann ca. 15.000 Artikeldatensätze von angestrebten 350.000 Datensätzen geschrieben. Mein Rechner ist mit 128 MB RAM ausgestattet, die Festplatte hat noch ca. 7 GB frei. Was mache ich falsch?

    Ich habe es bisher mit <b>write</b> und <b>writeln</b> versucht. Die Datei wird mit <b>rewrite</b> geöffnet. Versuchsweise habe ich regelmäßig <b>flush(textfile)</b> aufgerufen - brachte aber nichts. Aus genau dem gleichen Grund habe ich bereits die Arbeit mit dem MSXML-Tool abgebrochen und auf die Ausgabe in ein Textfile umgestellt.

    Vielen Dank für eure Hilfe!

    Gruß, Frank.

  • #2
    Hallo nochmal,

    habe das Problem schon selbst gefunden - es sind die Interbase-Express Komponenten. Arbeite ich mit einfacher TTable über die BDE funktioniert es. Hier habe ich dann "nur" das Problem, dass keine langen Integer-Felder (z. B. DECIMAL(18,5) unterstützt werden.

    Mal schaun, wie ich das löse!

    Fran

    Comment


    • #3
      Hallo,

      wenn es einen OLE DB-Provider für den InterBase 6 geben würde, wäre die Aufgabe sehr schnell erledigt: <br>
      1. Über ADO wird ein RecordSet für die zu exportierenden Datensätze angefordert. <br>
      2. ADO wird beauftragt, dieses RecordSet im XML-Format als Datei zu speichern. <br>

      Das Speicherproblem hat seine Ursache in der Verwendung von <b>TIBTable</b> - denn diese Komponenente versucht zum Vor- und Rückwärtsblättern im Datenbestand alle geladenen Datensätze zu puffern.

      Wenn <b>TIBQuery</b> verwendet wird, kann über die Eigenschaft <b>UniDirectional</b> diese Pufferfunktion deaktiviert werden. Da die eigene Anwendung jeden Datensatz sofort in die Datei schreibt, müssen die "alten" Datensätze nicht mehr im Arbeitsspeicher aufgehoben werden. In der Hilfe liest sich das so: "<i>If an application does not need bidirectional access to records in a result set, set UniDirectional to True. When UniDirectional is True, an application requires less memory and performance is improved.</i>".

      Als Vorgabewert ist UniDirectional auf False gesetzt, somit werden die geladenen Datensätze gepfuffert ("<i>...enabling forward and backward navigation.</i>")

      Comment

      Working...
      X