Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Lesefehler beim Anhängen von Datensätzen in dBase Datenbank (https://www.delphipraxis.net/85692-lesefehler-beim-anhaengen-von-datensaetzen-dbase-datenbank.html)

TOmega 3. Feb 2007 11:49

Datenbank: dBase • Zugriff über: TTable

Lesefehler beim Anhängen von Datensätzen in dBase Datenbank
 
Seit einiger Zeit kämpfe ich mit einem Problem, und hoffe hier vielleicht einen Tipp zu bekommen.
In meinem Delphi-Programm nutze ich eine Dbase-Datenbankdatei. Dazu habe ich eine Datasource angelegt, mit einer Table verbunden und nutze ein DBGrid zur Anzeige, also nichts Kompliziertes. Datensätze können automatisch oder manuell hinzugefügt werden.
Anfangs lief alles wie gewünscht. Die Probleme begannen mit steigender Datensatzanzahl (inzwischen über 27000). Nach dem Anhängen von ca. 10-12 Datensätzen bricht das Programm mit einem Lesefehler der *.dbf Datei ab. Es hilft nur noch ein Neustart der Anwendung. Der zuletzt angehägte Datensatz ist dann nur unvollständig ausgefüllt. Nach einigen dieser "Abstürze" ist dann auch die Index-Datei hinüber und hat sich mächtig "aufgebläht". Ein Zeitproblem beim Speichern schliesse ich aus, da der Fehler auch bei manueller Eingabe auftritt.
Kennt jemand dieses Problem ? Gibt es vielleicht einen Bug in der BDE ?

marabu 3. Feb 2007 13:44

Re: Lesefehler beim Anhängen von Datensätzen in dBase Datenb
 
Herzlich willkommen in der Delphi-PRAXiS, TOmega.

Wie sorgst du für das sichere Speichern deiner Daten?

Freundliche Grüße vom marabu

TOmega 3. Feb 2007 14:49

Re: Lesefehler beim Anhängen von Datensätzen in dBase Datenb
 
Hallo marabu, danke für die schnelle Antwort.

Ich bin natürlich davon ausgegangen, dass das Speichern des Caches automatisch erfolgt.
Wenn ich Dich richtig verstehe, soll ich durch regelmässiges Aufrufen der Methode FlushBuffers für das Eintragen der zwischengespeicherten Daten sorgen. Ich habe das versucht, leider ohne Erfolg.

Wenn ich sage, dass das Problem nach ca. 10 Datensätzen auftritt, heisst das auch, ich muss das nicht am Stück tun. Wenn ich heute 9 Datensätze anhänge geht alles glatt und morgen bekomme ich dann schon nach dem ersten Datensatz das Problem.

HaJo 3. Feb 2007 15:22

Re: Lesefehler beim Anhängen von Datensätzen in dBase Datenb
 
Hallo TOmega,

wie sehen denn Deine BDE-Einstellungen aus?

Gruß
HaJo

TOmega 3. Feb 2007 19:48

Re: Lesefehler beim Anhängen von Datensätzen in dBase Datenb
 
Hallo Hajo,
im Grunde sind es weitestgehend die Standardeinstellung der BDE:

LOCAL SHARE = false
MINBUFSIZE = 128
MAXBUFSIZE = 2048
LANGDRIVER = dBase DEU cp437
MAXFILEHANDLES = 48
LOW MEMORY USAGE LIMIT = 32
DEFAULT DRIVER = DBASE
SHAREDMEMSIZE = 2048

Ich hoffe, das sind die Werte, die Dich interessieren.
Gruß TOmega

marabu 3. Feb 2007 20:47

Re: Lesefehler beim Anhängen von Datensätzen in dBase Datenb
 
Hallo,

wenn sich dein Programm und die BDE-Konfiguration nach den ersten 25.000 Datensätzen nicht geändert haben und bis dahin alles problemlos lief, glaube ich nicht an eine fehlerhafte Einstellung. Du arbeitest nach einem Lesefehler doch hoffentlich nicht einfach weiter? Womit hast du die defekte DBF-Datei analysiert und repariert? Welche Version der BDE setzt du ein?

Freundliche Grüße

Bernhard Geyer 3. Feb 2007 20:49

Re: Lesefehler beim Anhängen von Datensätzen in dBase Datenb
 
Hast Du einen Virenscanner der auch deinen dBase-Analysiert?
Falls ja, nimm diese Dateiextension aus dem Check heraus.

TOmega 3. Feb 2007 23:58

Re: Lesefehler beim Anhängen von Datensätzen in dBase Datenb
 
@Bernhard Geyer:

Mein Virenscanner analysiert keine *dbf oder *mdx-Dateien. Testweise habe ich den Virenscanner auch mal komplett deaktiviert.

@marabu:

Ich habe mal mit einem Hex-Editor den Header und die letzten Datensätze der dBase-Datei untersucht und keinen Fehler in der Datenstruktur festgestellt. Nur der letzte Datensatz ist nicht vollständig ausgefüllt, was ich aber nach dem Neustart meiner Anwendung nachholen kann.
Ausserdem habe ich schon mehrfach mit dBase die Datenbank gepackt, also gelöschte Datensätze entfernt, und sortiert, wobei dBase ja eine komplett neue Datei erzeugt.
Es leidet also immer nur die Index-Datei und die habe ich auch schon mehrfach mit der Borland Datenbankoberfläche neu erzeugt. Mittlerweile habe ich eine Indexreparatur mit:

Delphi-Quellcode:
 DBIRegenIndexes(Table1.Handle);
in mein Programm aufgenommen.

Ursprünglich angefangen habe ich das Projekt vor Jahren mal unter Delphi 2. Es hat also schon verschiedene Versionen von Delphi, BDE und Betriebssystemen erlebt. Das Problem schein absolut Versionsunabhängig zu sein und tritt auch auf all meinen Rechnern auf.

Übrigens nutzt ein Bekannter von mir mein Programm auch. Er hat aber erst etwa 4000 Datensätze und keine Schwierigkeiten z.B. 200 Datensätze maschinell anfügen zu lassen (noch nicht). Darum glaube ich nicht an einen Programmfehler. Ich bin gespannt, wann bei meinem Bekannten die ersten Probleme auftauchen.

TOmega 4. Feb 2007 13:26

Re: Lesefehler beim Anhängen von Datensätzen in dBase Datenb
 
Um sicher zu gehen, dass sich bei meinem Projekt in dem Codegewusel nicht doch irgendwo ein Fehler eingeschlichen hat, habe ich ein simples Testprojekt erstellt, also nur Datasource, Table und DBGrid. Der einzige Programmcode besteht also aus Table.Open; beim Start und beim Beenden Table.Close; Was kann man da noch falsch machen?
Ich habe also das Testprojekt gestartet und manuell im DBGrid Datensätze zugefügt und nach dem 11. oder 12. Datensatz wird wieder mit der Fehlermeldung "Lesefehler Datei: ....*.dbf" abgebrochen. Will man weiterarbeiten kommt der Fehler "Datenstruktur fehlerhaft". Erst nach Neustart der Anwendung kann man weitermachen (für die nächsten 12 Datensätze).
Hatte denn wirklich noch niemand ein ähnliches Problem oder ein Idee ?

marabu 4. Feb 2007 13:41

Re: Lesefehler beim Anhängen von Datensätzen in dBase Datenb
 
Hallo,

stelle bitte mal dein Testprojekt zur Verfügung. Wenn die Test-Tabelle nicht im Programm erzeugt wird, dann packe sie als Leertabelle dazu. Welche Version der BDE hast du im Einsatz?

Freundliche Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:18 Uhr.
Seite 1 von 3  1 23      

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