Zitat von
PASST:
Dh. in der
BDE wird u.a. dieses Byte #28 am Anfang eingelesen, um festzustellen mit welchen Bedingungen die Tabelle geöffnet werden muss. Da es sicherlich noch weitere Bedingungen gibt, die beim Öffnen einer dBase-Tabelle beachtet werden müssen, wie kann ich diese in Delphi vorab abfragen? Gibt es da schon vorgefertigte Routinen seitens Delphi?
Meine Idee dazu ist: Im DataSet.BeforeOpen-Ereignis diverse DBErrors vorab abzufangen und auszuwerten. Die Frage bleibt nur welche?
Wenn die
BDE die dBase-Datei in der Mache hat, ist es zu spät.
Die
BDE ist auch nicht flexibel genug, um hier irgenwie einzugreifen.
Du kannst im BeforeOpen Ereignis prüfen, ob diese Byte #28 <> 0 ist.
Falls ja, könnte man die dBase-Datei kurz vorher patchen:
Delphi-Quellcode:
var
fs : TfileStream;
oldbyte , newbyte : char;
begin
fs : = TfileStream('test.dbf', fmReadWrite or fmShareDenyNone);
try
fs.Seek(28);
fs.Readbuffer(oldbyte, 1);
newbyte := #0;
fs.Seek(28);
fs.WriteBuffer(newByte, 1);
finally
fs.Free;
end;
end;
Das ist alles sehr unsauber, aber dBase war ja noch nie eine richtige Datenbank und du musst
jetzt das völlig veraltete Design ausbaden....
Du solltest erstmal prüfen, ob diese Byte an Position 28 überhaupt die Ursache deiner Probleme sind.
(mit Hexeditor nachschauen, was drin steht, patchen und testen, ob die
BDE dann damit klarkommt)