![]() |
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:
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.
FTable.DatabaseName := ExtractFileDir(FileName);
FTable.TableName := ExtractFileName(FileName); FTable.TableType := ttDBase; FTable.TableLevel := 4; FTable.FieldDefs.Clear; FTable.FieldDefs.Add('HALLO', ftFloat); FTable.CreateTable; Mittels:
Delphi-Quellcode:
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).
FTable.DatabaseName := 'dBASE-Dateien';
FTable.TableName := ExtractFileName(FileName); FTable.TableType := ttDBase; FTable.TableLevel := 4; FTable.FieldDefs.Clear; FTable.FieldDefs.Add('HALLO', ftFloat); FTable.CreateTable; Wie bekomme ich nun eine DBase4 Tabelle OHNE den BDE-Admin DBase-Level zu verändern und OHNE SetCurrentDirecory von Windows. Danke |
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?
|
Re: [DBase] Tabelle mittels TTable erstellen
Wir arbeiten halt nicht mehr mit der BDE.
|
Re: [DBase] Tabelle mittels TTable erstellen
Warum nimmst Du nicht TDBF. Kannste einfach installieren und spricht die TDBF ohne BDE an. Ganz einfach.
![]() Peter |
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. |
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?
|
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.
|
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!
|
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 04:45 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 by Thomas Breitkreuz