Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   TDBF-Komponente (https://www.delphipraxis.net/159620-tdbf-komponente.html)

roth 5. Apr 2011 15:22

Datenbank: dbf • Version: 1 • Zugriff über: tdbf

TDBF-Komponente
 
Hallo,

Ich habe folgendes Problem.

Ich versuche einen Export zu schreiben in diverse .dbf Dateien. Die dbf-Dateien sind mit der Struktur schon vorhanden und leer in einem Verzeichnis abgelegt.

Nun möchte ich diese Dateien abfüllen (siehe Code beispiel).

Nun erhalte ich immer einen EOutOfMemory...Obwohl genügent speicherplatz vorhanden ist und ich auch keine memoryleaks habe...

Zusagen ist das es ca. 35 Tabellen sprich .dbf-Dateien sind welche ich so abfülle.

Jemand eine Idee oder schon erfahrungen mit in .dbf Files exportieren?

Delphi-Quellcode:
FDbfFile := TDbf.Create(nil);
  FDbfFile.FilePath := AFile.DirectoryName;
  FDbfFile.TableName := AFile.FileName;
  FDbfFile.ReadOnly := False;
  FDbfFile.Open;

  // Dann eine while schlaufe um die zu exportierenden Daten:
  it.First;
  while it.HasData do begin
    FDbfFile.Insert;

    // Dann hier ein Integer abfüllen
    FDbfFile.Fields.FieldByName(AName).AsInteger := 0;

    // Habe auch schon so probiert AValue = Int
    FDbfFile.SetFieldData(FDbfFile.Fields.FieldByName(AName), @AValue, True);

    it.Next;
    FDbfFile.Post;
  end;
 
  FDbfFile.Close;
  FDbfFile.Free;
Vielen Dank!

shmia 5. Apr 2011 17:27

AW: TDBF-Komponente
 
Ich würde anstelle von .Insert die .Append Methode verwenden.
Der Unterschied zwischen diesen beiden Methoden ist zwar gering.
Aber die TDBF-Komponente könnte auf die Idee kommen die neuen Datensätze tatsächlich immer
als 1. Datensatz einzufügen, anstatt neue Datensätze am Ende anzuhängen.
Dieses Einfügen am 1. Datensatz wäre fatal, weil alle Datensätze dann um einem Platz "nach hinten" rücken müssten.
Das hätte zur Folge, dass bei jedem Einfügen die komplette DBF-Datei neu beschrieben würde.

roth 8. Apr 2011 13:19

AW: TDBF-Komponente
 
mmh danke für den hinweis habe dies mal so geändert...leider kommt der Fehler immer noch :(

ich denke es liegt an der art der abfüllung:

Delphi-Quellcode:
// Dann hier ein Integer abfüllen
    FDbfFile.Fields.FieldByName(AName).AsInteger := 0;

    // Habe auch schon so probiert AValue = Int
    FDbfFile.SetFieldData(FDbfFile.Fields.FieldByName(AName), @AValue, True);
denn wenn ich nur inserts mache ohne was reinzufüllen läuft es durch...

mfg

shmia 8. Apr 2011 15:04

AW: TDBF-Komponente
 
Also um Felder zu befüllen gibt es zwei sinnvolle Schreibweisen
Delphi-Quellcode:
FDbfFile['EinNumFeld'] := 0; // 1.)
FDbfFile.FieldByName('EinNumFeld').AsInteger := 0; // 2.)
Ich würde die Variante 1.) vorziehen, da weniger Tipparbeit.

In deinem Code gibt es die Variable "AName", die dort nicht gefüllt wird.
Die Feldnamen müssen natürlich korrekt sein (Grossbuchstaben, max 10 Zeichen!), sonst wird das nix.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:25 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