Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [DBase] Tabelle mittels TTable erstellen (https://www.delphipraxis.net/120393-%5Bdbase%5D-tabelle-mittels-ttable-erstellen.html)

brechi 10. Sep 2008 13:40

Datenbank: DBASE • Version: 4/7 • Zugriff über: TTable

[DBase] Tabelle mittels TTable erstellen
 
Folgendes Problem: Ich möchte eine DBase Tabelle (*.dbf) in Version 4 erstellen.
Dazu sollte eigentlich das TableLevel auf 4 gesetzt werden. Beim BDE-Admin unter Control-Panel->Configuration->Native->DBase ist ein Level von 7 angegeben.

Mittels:
Delphi-Quellcode:
  FTable.DatabaseName := ExtractFileDir(FileName);
  FTable.TableName := ExtractFileName(FileName);
  FTable.TableType := ttDBase;
  FTable.TableLevel := 4;
  FTable.FieldDefs.Clear;
  FTable.FieldDefs.Add('HALLO', ftFloat);
  FTable.CreateTable;
wird mir immer eine DBF erstellt in der höheren Version von den beiden die ich angegeben habe. D.h. Ist beim BDE-Admin "7" angegeben und bei TableLevel in Delphi der Wert "4" (obiges Beispiel) wird eine DBase in der Version 7 erstellt. (1. Byte der Datei gibt die Version an: 03=Version4; 04=Version7). Nur wenn bei beiden Einstellungen jeweils eine "4" steht, erhalte ich auch wirklich eine DBase 4 Datei. Jetzt darf ich aber die Einstellungen beim BDE-Admin NICHT ändern.

Mittels:
Delphi-Quellcode:
  FTable.DatabaseName := 'dBASE-Dateien';
  FTable.TableName := ExtractFileName(FileName);
  FTable.TableType := ttDBase;
  FTable.TableLevel := 4;
  FTable.FieldDefs.Clear;
  FTable.FieldDefs.Add('HALLO', ftFloat);
  FTable.CreateTable;
bekomme ich eine Tabelle die immer im DBase 4 Format ist. Dort kann ich aber den Ordner nicht setzten in dem diese gespeichert werden soll (d.h. der speichert diese immer in dem Ordner wo auch das Hauptprogramm liegt).

Wie bekomme ich nun eine DBase4 Tabelle OHNE den BDE-Admin DBase-Level zu verändern und OHNE SetCurrentDirecory von Windows.

Danke

brechi 11. Sep 2008 09:47

Re: [DBase] Tabelle mittels TTable erstellen
 
Ich upps mal weil es heute fertig werden soll. Wie kann ich eine dBASE 4 Tabelle mittels TTable erstellen? Wie machr ihr das? Ich hab jetzt ewig dran rumgesucht und bekomms einfach net hin, so schwierig kanns doch net sein. Oder bin ich einfach viel zu doof dafür?

mkinzler 11. Sep 2008 09:49

Re: [DBase] Tabelle mittels TTable erstellen
 
Wir arbeiten halt nicht mehr mit der BDE.

Kuster Peter 11. Sep 2008 13:29

Re: [DBase] Tabelle mittels TTable erstellen
 
Warum nimmst Du nicht TDBF. Kannste einfach installieren und spricht die TDBF ohne BDE an. Ganz einfach.

http://tdbf.sourceforge.net/

Peter

brechi 16. Sep 2008 09:14

Re: [DBase] Tabelle mittels TTable erstellen
 
Danke dann müsste ich aber das Projekt ändern. Vielleicht für die nächsten.

Hab immerhin nun rausgefunden, dass bei ftString und ftBCD er Dbase4 Tabellen erstellt, erst bei ftFloat und ftInteger werden DBase7 Tabellen erstellt. Müsste also alles als BCD/String speichern anstatt Integer/Float, das würde erstmal reichen. Schön ist es aber nicht.

mkinzler 16. Sep 2008 09:16

Re: [DBase] Tabelle mittels TTable erstellen
 
Dir ist aber schon bewusst, das dein Projekt u.U. mit dem nächsten Windows-Update dann nicht mehr funktioniert?

brechi 16. Sep 2008 09:22

Re: [DBase] Tabelle mittels TTable erstellen
 
Ist kein Problem, da hier auch noch mit Dos gearbeitet wird (dafür z.B. DBase 4 Dateien für den Zugriff). Wenn du aber irgendwo Infos dazu hast, bzw es darüber ne Diskussion gibt kannst mir gerne den Link posten bzw. mich aufklären warum es nicht mehr mit dem nächsten Windows Update funktionieren sollte.

mkinzler 16. Sep 2008 09:25

Re: [DBase] Tabelle mittels TTable erstellen
 
Die BDE ist nunmal seit D6 abgekündigt. Bei Vista kann (konnte) man diese nur mit Klimmzügen installieren. Auch unter Win2000 und XP gab/gibt es gewisse Probleme. TDbf greift direkt ohne Abhängigkeit zu. Alternativ halt ADO verwenden, aber keine BDE!

simmi 1. Okt 2008 13:22

Re: [DBase] Tabelle mittels TTable erstellen
 
Hallo,

leider ist es aber so, dass nicht immer alles ganz einfach auf etwas neues umzustellen ist. Ich hatte ein ähnliches Problem. Die BDE steht im Level 7 und die ODBC im Level 5. Ich habe das Problem über die Registry gelöst. Bedingung ist ein erlaubter Schreibzugriff.

Die Procedure in den Programmstart stellen und die Sache ist erledigt. Übrigens hat auch Word 2007 ein Problem damit eine dbf Datei als Datenquelle zu akzeptieren, wenn Sie im Level über 5 ist.

Delphi-Quellcode:
Procedure BDE_registry;
var regist: TRegistry;
  s : string;
  i : integer;

begin
  regist:=TRegistry.Create;
  regist.RootKey:=HKEY_LOCAL_MACHINE;
  if not regist.OpenKey('SOFTWARE\Borland\Database Engine\Settings\DRIVERS\DBASE\TABLE CREATE', false) then
     begin
      showmessage('Rechte nicht vorhanden');
      regist.closekey;
      regist.free;
      exit;
     end;
  {Der Wert kann nur als String gelesen werden - sonst Fehlermeldung}
  s:=regist.ReadString('LEVEL');
  i:=StrToInt(s);
  if i>5 then regist.WriteString('LEVEL','5');
  regist.Free;
end;


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