Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   TDBF, Erstellen von DBase III+ Dateien (https://www.delphipraxis.net/189456-tdbf-erstellen-von-dbase-iii-dateien.html)

waldforest 14. Jun 2016 13:07

Datenbank: dBase • Version: III+ • Zugriff über: TDBF

TDBF, Erstellen von DBase III+ Dateien
 
Hallo,
ich muss (leider) einen Datenexport nach dBase III+ realisieren.
Am Anfang steht die Erstellung einer dbf-Datei.
Leider, trotz Leveleinstellung in der TDBF, wird diese nicht auf Level 5 erstellt,sondern mit Level 7 somit ist die Datei in dBase nicht lesbar (das erste Bit ist nicht 03).

Irgendwie gelingt es mir nicht TDBF so einzustellen (level), dass ich eine korrekte arstellen kann.
Was könnte die Ursache sein, hängt dies ggf. mit der Grundeinstellung der BDE auf LEVEL 7 zusammen ? Ist hierzu eventuell ein Eintrag in der Registry erforderich ?
Below is the Registry node hierarchy leading to this parameter (on my
computer, which is running NT).

HKEY_LOCAL_MACHINE
SOFTWARE
Borland
Database Engine
Settings
DRIVERS
DBASE
TABLE CREATE

Hat jemand bereits eine Erfahrung, Lösung für dieses Problem ?
Wo muss ich ggf. im Source der TDBF Änderungen vornehmen ?

mfg

Fritzew 14. Jun 2016 13:59

AW: TDBF, Erstellen von DBase III+ Dateien
 
Was benutzt Du wirklich TDBF oder die BDE, die haben nichts miteinander zu tun
Dokumentation zu TDBF:
7.28 TableLevel
property TableLevel: Integer read FTableLevel write SetTableLevel;
Examine TableLevel to nd the current table level. Set TableLevel to specify the table level
for to be created tables. The Active property must be false to be able to set TableLevel.
These are the possible levels:
 3: dBase III+ compatible.
 4: dBase IV compatible. The only di erence to dBase III+ is the current codepage,
locale. dBas

waldforest 14. Jun 2016 14:10

AW: TDBF, Erstellen von DBase III+ Dateien
 
Hallo,
ich nutze TDBF, wollte bewusst die BDE nicht nutzen.

Auch die Einstellung Level 3 liefert im Header nicht wie erwartet 03, genau da liegt mein Problem.

Fritzew 14. Jun 2016 14:28

AW: TDBF, Erstellen von DBase III+ Dateien
 
Wenn die Tabelle Blobs enthalten kann steht da nicht 3 sonder 131, Das ist korrekt
Ansonsten funktionieren Die TDBF Komponenten genau wie gewünscht

waldforest 14. Jun 2016 17:50

AW: TDBF, Erstellen von DBase III+ Dateien
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich finde meinen eventuellen Fehler nicht.

Anbei eine Demo. sobald ich dBase III Plus die Datei öffnen will erhalte ich die Fehlermeldung

"Keine dBase Datenbank"


Code:
procedure TForm1.btn_DateiErstellenClick(Sender: TObject);
begin
if dlg_saveDBF.Execute then
  begin
  With dbf_Dbase do begin
    Close;
    TableLevel := 3;
    Exclusive := True;
    FilePath := ExtractFilePath(dlg_saveDBF.FileName);
    TableName := ExtractFileName(dlg_saveDBF.FileName);
    with FieldDefs do begin
      Clear;
      Add('Field1',ftString,10,False);
      Add('Field2',ftInteger,0,False);
      Add('Date',ftDate,0,False);
    end;
    CreateTable;
  end;
  end;
end;

Fritzew 14. Jun 2016 18:35

AW: TDBF, Erstellen von DBase III+ Dateien
 
Kannst Du mal bitte mit dBase III Plus eine Datei mit gleicher oder ähnlicher Struktur erzeugen und hier anhängen?

waldforest 14. Jun 2016 19:21

AW: TDBF, Erstellen von DBase III+ Dateien
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
anbei die beiden Dateien.

Unterschied liegt im Byt2, wenn ich dies auf z.B. 10 ändere erkennt dBase die Datei.
Wobei dieses ja Teil des Datums der letzten Änderung der Datei ist.

Fritzew 14. Jun 2016 19:43

AW: TDBF, Erstellen von DBase III+ Dateien
 
Tja ich habe hier kein dbase III mehr

aber ändere in dbf_dbffile.pas

Delphi-Quellcode:
procedure TDbfFile.WriteHeader;
var
  SystemTime: TSystemTime;
  lDataHdr: PDbfHdr;
begin
  if (HeaderSize=0) then
    exit;

  //FillHeader(0);
  lDataHdr := PDbfHdr(Header);
  GetLocalTime(SystemTime{%H-});
//  lDataHdr^.Year := SystemTime.wYear - 1900; // replace
lDataHdr^.Year := SystemTime.wYear - 2000; // with these
  lDataHdr^.Month := SystemTime.wMonth;
  lDataHdr^.Day := SystemTime.wDay;
//  lDataHdr.RecordCount := RecordCount;
  inherited WriteHeader;

  // write EOF terminator
//if RecordCount = 0 then
//  WriteEOFTerminator;
end;
Dbase III war nicht 2000 fest. Mann ist das lange her das ich über so ein Problem gestolpert bin :-D

Sollte gehen

waldforest 14. Jun 2016 20:22

AW: TDBF, Erstellen von DBase III+ Dateien
 
Hallo,
super, vielen Dank, das war's...HOCHACHTUNG !!!!!
Aufs Jahr 2000 wäre ich nie gekommen.

Fritzew 14. Jun 2016 20:30

AW: TDBF, Erstellen von DBase III+ Dateien
 
Gerne geschehen,

aber eine Anmerkung noch. DBase III ist wie die Dinosaurier, man sollte sie nicht wiederbeleben. Das Teil ist über 30 Jahre alt!!:roll::roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:51 Uhr.
Seite 1 von 2  1 2      

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