![]() |
Datenbank: BDE • Zugriff über: Aus Delphi direkt
.dbf BDE
Hallo
folgendes Problem: ich möchte aus einer Record-Liste eine .dbf-Datei erstellen. Das ganze muss nach Vorgabe mit BDE laufen. Bisher gibt es folgenden Code, der wohl schon mal (Win16) funktioniert hat. Folgendes ist bekannt: list_begin : ist der Zeiger auf eine Liste der Daten, die aus der Datei gelesen wurden FileName : Zieldateiname
Delphi-Quellcode:
...
type log_struc = ^struc; struc = record id : integer; { Nr. des Datensatzes } Datum : string[10]; { Datum des Aufzeichnens } Std, Min, Sek : byte; { Zeit der Aufzeichnung } ... km : real48; ... Prev : log_struc; { der Vorgänger Pointer } Next : log_struc; { und der Nachfolger } end; Table1 : TTable listBegin ... procedure NewDb; var p : log_struc; { interne Struktur der Aufzeichnungsdaten } begin with Table1 do begin Active := False; DatabaseName := 'MyNewAlias'; // einen Alias vergeben TableName := FileName; // und hier den echten Namen zuordnen TableType := ttDBase; // Datentyp ist DBase { Nun werden falls vorhanden sämtliche Felder entfernt und dann neu definiert, mit Typ und Größe, hier wurde sich an das TAL Format gehalten } with FieldDefs do begin Clear; Add('Datum', ftString, 10, false); Add('Std', ftInteger, 0, false); Add('Min', ftInteger, 0, false); Add('Sek', ftInteger, 0, false); ... Add('km', ftfloat, 0, false); ... Add('Text', ftString, 10, false); end; CreateTable; // das wars und nun erzeugen end; { Datenbankstruktur ist damit definiert, nun können Daten eingetragen werden } p := list_begin; { auf den Anfang unserer Aufzeichnungdatenliste } Table1.Active := True; // Tabelle aktivieren while p <> nil do // Nun durch die ganze Liste gehen begin Table1.Append; // und Datensätze anhängen ... Table1.FieldByName('km').AsFloat := p^.km; Table1.FieldByName('Std').AsInteger := p^.std; Table1.FieldByName('Min').AsInteger := p^.min; Table1.FieldByName('Sek').AsInteger := p^.sek; Table1.FieldByName('Datum').AsString := p^.datum; ... Table1.FieldByName('Text').AsString := p^.Text; p := p^.next; // auf nächsten Listenelement zeigen end; Table1.Post; // Datensätze in Datenbank schreiben Table1.close; // Tabelle löschen intro.konvstat.visible := False; // Gauge verschwindet wieder end; Ergebnis: .dbf-Datei, Inhalt: Müll...... Exel zeigt irgendwelchen Schrott an, BDE-Datenbankoberfläche sagt gleich, dass sie das gar nicht erst öffnet. Alle Tips die ich so gefunden haben liefen auf "nimm lieber...anstatt BDE" aber vielleicht kann mir doch jemand was sagen. |
Re: .dbf BDE
Hast du mal im Debugger nachgesehen, wo der "Müll" entsteht? Stimmen die Werte, die er aus der Liste lädt? Obwohl die BDE veraltet ist, vermute ich mal, das der Fehler nicht an der Speicherung in der Datenbank liegt, sondern in der Interpretation der Liste.
|
Re: .dbf BDE
hi,
wo entsteht der "Müll"??? Die Liste stimmt, mehrfach geprüft(!!), und in der .dbf-Datei stimmen nicht mal die Überschriften bzw. Spalten etc. (bei Exel). Und wie gesagt, das Format ist an sich nicht lesbar. Kann es vielleicht daran liegen, dass beim Erstellen der Tabelle die Felder in einer anderen Reihenfolge angegeben werden wie beim Eintragen der Daten? |
Re: .dbf BDE
Un der Schreibcode stimmt auch. Überprüfre mal im Debugger, welcher Wert p^.km und die weiteren Felder hier
Delphi-Quellcode:
haben.
Table1.FieldByName('km').AsFloat := p^.km;
... |
Re: .dbf BDE
Delphi-Quellcode:
Also hier hab ich schnell nomal ne Prozedur rausgekrammt bei der das erstellen von dbf dateien auf jeden fall läuft.
with Table1 do begin
active:=false; // Table-Zugriff muss auf jeden Fall geschlossen sein DatabaseName:=verzeichnis; // Verzeichnis, in dem die Tabelle erzeugt werden soll TableName:='Artikel'; // Name der Datei, die erzeugt werden soll TableType:=ttdBase; // Tabelle erhält das dBase-Format with FieldDefs do begin clear; Add('NAME', ftString, 25, false); Add('BEZ', ftString, 50, false); end; CreateTable; end; |
Re: .dbf BDE
@mkinzler
p^km hat z.b. den Wert 0.0175 dann hat Table1.FieldByName('km'.AsFloat) den selben Wert Ich benutze übrigens Delphi v6.0 unter WinXP. @EDatabaseError wo ist der Unterschied? |
Re: .dbf BDE
Zitat:
|
Re: .dbf BDE
Sorry, sollte kein Angriff sein!
Ich habe mal
SQL-Code:
eingegeben und die Datei dann via Dialog unter xyz.dbf nach c:\Programme gespeichert.
DatabaseName := 'C:\Programme';
Geht aber immer noch nicht. Die Datenbakoberfläche sagt: "Die Tabelle kann nicht geöffnet werden" und nach >> "Ungültiger Parameter" und öffnet gar nichts. Ich werde den Teil wohl mal aus dem kompletten Programm auskoppeln müssen und etwas experimentieren, bis ich weiß wie das ganze so richtig funktioniert. Wer weiß woher da welche Fehler kommen. |
Re: .dbf BDE
Verwende mal zum Test
![]() |
Re: .dbf BDE
Hi.
Als erstes würde ich prüfen, ob das CreateTable() funktioniert hat. Der Alias wird nur gebraucht, wenn eine TDatabase-Komponente eingesetzt wird. Den Aufruf der Methode Post() würde ich innerhalb der Schleife machen. Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:05 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