Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi dBase-Datei mit defektem/fehlenden Index öffnen (https://www.delphipraxis.net/36589-dbase-datei-mit-defektem-fehlenden-index-oeffnen.html)

PeterRettig 22. Dez 2004 10:29


dBase-Datei mit defektem/fehlenden Index öffnen
 
Hallo,

ich suche eine Lösung um in einem Programm mit Hilfe der BDE eine dBase-Datei
zu öffnen, bei der die Indexdatei .mdx fehlt oder beschädigt ist. Dies soll
ausschließlich im readonly-Modus geschehen.
Versuche ich eine derartige Datei in der Datenbankoberfläche oder mit dem
einer TTable im Designmodus zu öffnen, bekomme ich eine Messagebox "Arbeitsindex
nicht vorhanden, fehlerhaft oder Indexschlüssel nicht lesbar." Danach darf ich diese
im "Nur-Lesen-Modus" öffnen. Genau das ist auch mein Ziel im Quelltext (natürlich
ohne diese Box).
Öffne ich aber die gleiche Datei:
Delphi-Quellcode:
 
Table1.DatabaseName := 'c:\';
Table1.TableName := 'Beispiel.dbf';
Table1.ReadOnly := true;
Table1.Open;
Erhalte ich nur eine Fehlermeldung:
"Beschädigter Header in Tabelle/Index Datei: C:\Beispiel.MDX"
und die Tabelle ist natürlich nicht geöffnet.

Was kann ich tun?

Gruß, Peter

trifid 22. Dez 2004 11:01

Re: dBase-Datei mit defektem/fehlenden Index öffnen
 
entweder
du reparierst die Tabelle oder
du erstellst diese MDX-Datei neu oder
du löscht die beschädigte MDX-Datei und öffnest dann die Tabelle

PeterRettig 22. Dez 2004 11:16

Re: dBase-Datei mit defektem/fehlenden Index öffnen
 
Das Problem bei diesen Vorschlägen ist folgendes:
Die Tabelle wird von einem weiteren Prozeß benutzt,
der diesen Index gerne genau so verwendet (wahrscheinlich
eine eigene dBase-Engine).
Also "dran herumdoktorn" darf ich nicht. Wenn man einfach
nur die .MDX löscht erhält man im übrigen die gleiche
Fehlermeldung. Ich frage mich nur, wie wird das von der
Datenbankoberfläche oder von der TTablekomponente zur
Designtime denn gemacht, das es funktioniert??

trifid 22. Dez 2004 12:06

Re: dBase-Datei mit defektem/fehlenden Index öffnen
 
Zitat:

Die Tabelle wird von einem weiteren Prozeß benutzt,
dann geht grundsätzlich nicht :!:
Delphi-Quellcode:
Table1.ReadOnly := true;
Zitat:

Also "dran herumdoktorn" darf ich nicht. Wenn man einfach
nur die .MDX löscht erhält man im übrigen die gleiche
Fehlermeldung.
gibt es zu dieser Tabelle noch eine weitere Datei/Index ?

Zitat:

Ich frage mich nur, wie wird das von der
Datenbankoberfläche oder von der TTablekomponente zur
Designtime denn gemacht, das es funktioniert??
Grundsätzlich würde ich Datenbankoberfläche und TTable trennen, da es auch unterschiedlich realisiert wurde. Ich glaube nicht, wenn die Tabelle von einem anderen Prozess im Zugriff ist, dass du dann mit Table1.ReadOnly := True in der Delphi-IDE die Tabelle öffnen kannst.

Entweder die Tabelle ist exklusiv offen oder nicht.
Was passiert wenn du die Tabelle exklusiv aufmachst und der andere Prozess greift darauf zu.
Dann bekommt sicherlich die andere Anwendung einen Fehler.

Was du machen könntest, dass du die Tabelle über einen share copy in ein anderes Verzeichnis zur Laufzeit kopieren könntest. Dann kannst du über das Verzeichnis auf eine Kopie der Tabelle zugreifen. Vergesse nicht auch die .mdx, .mb oder .ntx oder .nt1 etc. mit zu kopieren.

PeterRettig 22. Dez 2004 12:30

Re: dBase-Datei mit defektem/fehlenden Index öffnen
 
Zitat:

Grundsätzlich würde ich Datenbankoberfläche und TTable trennen, da es auch unterschiedlich realisiert wurde. Ich glaube nicht, wenn die Tabelle von einem anderen Prozess im Zugriff ist, dass du dann mit Table1.ReadOnly := True in der Delphi-IDE die Tabelle öffnen kannst.
Ich kann aber das Ganze auch (und zwar während der andere Prozess zugreift) mit
dem Objektinspektor öffnen! Einfach den Dateinamen bei Table1 in TableName
eintragen und Active auf true setzen. Dann werde ich gefragt ob ich das Teil
im Nur-Lesen-Modus öffnen will und dann Bingo, schon ist die Tabelle geöffnet.

Bei der beschriebenen Datei handelt es sich im übrigen um die Fritzfax.dbf
in der das gleichnamige Programm alle Infos über ein- und ausgehende Faxe
ablegt...

trifid 22. Dez 2004 13:41

Re: dBase-Datei mit defektem/fehlenden Index öffnen
 
Zitat:

Ich kann aber das Ganze auch (und zwar während der andere Prozess zugreift) mit
dem Objektinspektor öffnen! Einfach den Dateinamen bei Table1 in TableName
eintragen und Active auf true setzen.
entweder es leigt an meinen Delphi oder es gibt was neues
Zitat:

Dann werde ich gefragt ob ich das Teil
im Nur-Lesen-Modus öffnen will und dann Bingo, schon ist die Tabelle geöffnet.
und wie ist dann die der andere Prozess, kannst du der dann noch etwas mit der Tabelle machen?

Zitat:

Bei der beschriebenen Datei handelt es sich im übrigen um die Fritzfax.dbf
in der das gleichnamige Programm alle Infos über ein- und ausgehende Faxe
ablegt...
habe ich zwar nicht im Einsatz - aber mit 3 Verschiedenen TTable-Komponenten ausprobiert.
Fazit: Wenn eine Tabelle exklusiv geöffnet ist, kann kein zweiter Prozess diese öffnen.
Es sei, die Tabelle wird nicht exklusiv geöffnet.
Bei mir ist das reproduzierbar.
Auch die IDE gibt Meldungen, dass die Tabelle in Gebrauch ist.

eddy 22. Dez 2004 15:15

Re: dBase-Datei mit defektem/fehlenden Index öffnen
 
Hallo PeterRettig,

es sollte eigentlich funktionieren, die Fritz-Datenbanken ohne Fehlermeldung zu öffnen.

Mit der Delphi-Datenbankoberfläche erhalte ich eine Fehlermeldung (konnte Tabelle nicht öffnen), aber mit meinem eigenen DB-Manager kann ich die Original-Fritz-DB bei aktivem FritzFax öffnen und auch die Indizies lassen sich verwenden.

Ich nutze Win2000, Delphi5 und FritzFax 3.04 Rev. 1.48

mfg
eddy

PeterRettig 26. Dez 2004 18:25

Re: dBase-Datei mit defektem/fehlenden Index öffnen
 
Ich habe eben festgestellt, dass die Datenbank wirklich
defekt ist (Fritz scheint das aber nicht zu stören).
Nach einer Neuinstallation von Fritz ist alles paletti...

Gibt es eine Möglichkeit (Freeware etc.) um eine DBase-
Datei mit defektem Header/Index etc. zu reparieren?

kiar 26. Dez 2004 18:32

Re: dBase-Datei mit defektem/fehlenden Index öffnen
 
hallo peter,

man kann einen Index reparieren :
Delphi-Quellcode:
DBIRegenIndexes(table1.handle);
vorausgesetzt ist eine exclusiv geöffnete Tabelle.

raik

PeterRettig 26. Dez 2004 18:37

Re: dBase-Datei mit defektem/fehlenden Index öffnen
 
Leider bekomme ich die DBF-Datei mit der BDE aber
nicht auf! Gibt es ein Tool ähnlich Advanced DBF Repair
als Freeware? 70 $ sind für solch ein Tool deutlich
zu viel!


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:06 Uhr.
Seite 1 von 2  1 2      

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