AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

.dbf BDE

Ein Thema von Andy U · begonnen am 19. Jun 2006 · letzter Beitrag vom 5. Jul 2006
Antwort Antwort
Seite 1 von 2  1 2      
Andy U

Registriert seit: 14. Jun 2006
17 Beiträge
 
#1

.dbf BDE

  Alt 19. Jun 2006, 14:01
Datenbank: BDE • Zugriff über: Aus Delphi direkt
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: .dbf BDE

  Alt 19. Jun 2006, 14:12
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Andy U

Registriert seit: 14. Jun 2006
17 Beiträge
 
#3

Re: .dbf BDE

  Alt 19. Jun 2006, 14:21
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: .dbf BDE

  Alt 19. Jun 2006, 14:24
Un der Schreibcode stimmt auch. Überprüfre mal im Debugger, welcher Wert p^.km und die weiteren Felder hier
Delphi-Quellcode:
Table1.FieldByName('km').AsFloat := p^.km;
...
haben.
Markus Kinzler
  Mit Zitat antworten Zitat
EDatabaseError

Registriert seit: 11. Mai 2005
Ort: Göppingen
1.238 Beiträge
 
Delphi 2007 Professional
 
#5

Re: .dbf BDE

  Alt 19. Jun 2006, 14:40
Delphi-Quellcode:
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;
Also hier hab ich schnell nomal ne Prozedur rausgekrammt bei der das erstellen von dbf dateien auf jeden fall läuft.
Tobias
It's not a bug, it's a feature.
  Mit Zitat antworten Zitat
Andy U

Registriert seit: 14. Jun 2006
17 Beiträge
 
#6

Re: .dbf BDE

  Alt 19. Jun 2006, 14:45
@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?
  Mit Zitat antworten Zitat
EDatabaseError

Registriert seit: 11. Mai 2005
Ort: Göppingen
1.238 Beiträge
 
Delphi 2007 Professional
 
#7

Re: .dbf BDE

  Alt 19. Jun 2006, 14:51
Zitat von Andy U:
@EDatabaseError
wo ist der Unterschied?
Du vergibst unter Databasename einen Alias / MyNewAlias in dem Webtut von mir steht das an der stelle das Verzeichnis z.B. c:\... stehen muss. Und wie gesagt die Datenbankoberfläche öffnet normalerweise alles, zeigt es dann nur komisch an. Und ich hab meins mal gepostet, da ich weiß das es mit dieser methode der erstellung zu 1000 % funkt.
Tobias
It's not a bug, it's a feature.
  Mit Zitat antworten Zitat
Andy U

Registriert seit: 14. Jun 2006
17 Beiträge
 
#8

Re: .dbf BDE

  Alt 19. Jun 2006, 15:16
Sorry, sollte kein Angriff sein!

Ich habe mal
DatabaseName := 'C:\Programme'; eingegeben und die Datei dann via Dialog unter xyz.dbf nach c:\Programme gespeichert.
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: .dbf BDE

  Alt 19. Jun 2006, 15:22
Verwende mal zum Test TDbf. So kannst du eingrenzen, wo der Fehler liegt.
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: .dbf BDE

  Alt 19. Jun 2006, 15:35
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:50 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