DbZap() - Fehler

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
ingo
UDF-Programmierer
UDF-Programmierer
Beiträge: 62
Registriert: Fr, 19. Okt 2007 10:20
Wohnort: Lüneburg
Danksagung erhalten: 1 Mal
Kontaktdaten:

DbZap() - Fehler

Beitrag von ingo »

Moin Forum,

ich habe ein sporadisch auftretendes Problem mit dem ZAP-Befehl:

Auf einem recht schnellen XP-Rechner ohne Netzwerkanschluss, XBase 1.9 mit aktuellen Hotfixes, kommt es beim "zappen" einer (natürlich exclusive geöffneten) DBF/NTX-Tabelle zu einem Fehler - siehe Fehlerprotokoll.

Der Code ist simpel:

(...)
SELECT [TABLE]
ZAP
(...)

Nach dem Fehler sieht die DBF/NTX-Tabelle so aus:

XARTIK.DBF 355 18.10.2007 11:30 -a--c
XARTIK.DBT 512 18.10.2007 11:30 -a--c
XARTIKK1.NTX 2.048 18.10.2007 11:28 -a--c
XARTIKK2.NTX 2.048 18.10.2007 11:28 -a--c
XARTIKK3.NTX 2.048 18.10.2007 11:28 -a--c
XARTIKK4.NTX 114.688 18.10.2007 11:02 -a--c
XARTIKK5.NTX 172.032 18.10.2007 11:02 -a--c

286 k in 7 Dateien

Es sieht so aus, als wären DBF, DBT und die ersten 3 Schlüssel gelöscht worden, beim 4. und 5. hat's nicht geklappt.

Aus der XBase-Newsgroup habe ich den Tipp bekommen, über die Funktion DbeInfo() mit den Parametern DBFDBE_LIFETIME und LOCKRETRY zu experimentieren.

Das ist aber nicht so einfach, weil ich es gerade einmal geschafft habe, den Fehler auf meinem PC zu reproduzieren. Außerdem habe ich keine Beschreibung für die Benutzung von DbeInfo() mit allen Parametern gefunden.

Hat jemand einen Tipp für mich, wie ich das Problem lösen kann?

Danke + Gruß,

Ingo




------------------------------------------------------------------------------
FEHLERPROTOKOLL von "C:\HARMONIA\Progs_HV\Vertrieb_hv.EXE" Datum: 16.10.2007
08:30:55

Xbase++ Version : Xbase++ (R) Version 1.90.331
Betriebssystem : Windows XP 05.01 Build 02600 Service Pack 2
------------------------------------------------------------------------------
oError:args :
oError:canDefault : J
oError:canRetry : N
oError:canSubstitute: N
oError:cargo : NIL
oError:description : Interne Datenstrukturen beschädigt
oError:filename :
oError:genCode : 41
oError:operation : DbZap
oError:osCode : 0
oError:severity : 2
oError:subCode : 5
oError:subSystem : BASE
oError:thread : 1
oError:tries : 0
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von HV_DATENIMPORT_IKSGETDIALOG:AUFBAU_VARTAU(349)
Aufgerufen von HV_DATENIMPORT_IKSGETDIALOG:DATEIEN_IMPORTIEREN(212)
Aufgerufen von (B)HV_DATENIMPORT_IKSGETDIALOG:DEF_BUTTONS(837)
Aufgerufen von MAIN(372)
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag von andreas »

Hallo Ingo,

ich weiss nicht, ob es in deinem Programm passt, aber ich erzeuge solche Dateien immer neu.

Versuch es mal ohne Indexes zu machen. Vielleicht ist ein Index defekt, dann evtl. Indexes immer neu erzeugen.

Lifetime kannst du so sethen:

Code: Alles auswählen

DbeSetDefault( "DBFNTX" )
DbeInfo( COMPONENT_DATA, DBFDBE_LIFETIME, 5 )
Die Beschreibung dafür findest du in Hilfe unter der jeweiligen DBE. z.B. nach DBFDBE suchen.
Gruß,

Andreas
VIP der XUG Osnabrück
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hallo,

werden denn die NTX- Dateien beim Zap() aktualisiert ?
Bei CDX-Dateien, mit denen ich arbeite geschieht dies.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
ingo
UDF-Programmierer
UDF-Programmierer
Beiträge: 62
Registriert: Fr, 19. Okt 2007 10:20
Wohnort: Lüneburg
Danksagung erhalten: 1 Mal
Kontaktdaten:

Beitrag von ingo »

Moin Rolf,

ja - die NTX-Dateien werden beim ZAP "geleert" - so wie die ersten 3...

Hi Andreas,

danke für den Tipp - ich hatte gehofft, den Neuaufbau zu vermeiden (weil ich tendenziell faul bin,) aber dann gehe ich wohl dran.
Die DBFDBE_LIFETIME interpretiere ich so, dass es eigentlich keinen Zusammenhang mit meinem Problem geben dürfte. Bei der Voreinstellung von 50 Millisekunden würde das ja bedeuten, dass es zum Fehler kommt, weil zwischen dem Schließen der DBF/NTX-Tabelle, dem erneuten EXCLUSIVE-Öffnen und dem Ausführen des ZAP weniger als diese 50 ms vergehen. Dazwischen liegt das schließen eines Fensters, das Öffnen eines Neuen Fensters und ein Mausklick auf einen "Start"-Button. Und so schnell ist kein Mensch, oder?

Jedenfalls danke!

Ingo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: DbZap() - Fehler

Beitrag von AUGE_OHR »

hi,
ingo hat geschrieben: ich habe ein sporadisch auftretendes Problem mit dem ZAP-Befehl:
schön das du den Weg hier ins Forum gefunden hast.
Zu deinem Problem : Nutze doch einfach mal die "suchen" Funktion
hier im Forum und gib DBESYS ein :)

gruss by OHR
Jimmy
Benutzeravatar
ingo
UDF-Programmierer
UDF-Programmierer
Beiträge: 62
Registriert: Fr, 19. Okt 2007 10:20
Wohnort: Lüneburg
Danksagung erhalten: 1 Mal
Kontaktdaten:

Beitrag von ingo »

Moin OHR,

dann werde ich mal experimentieren - danke nochmal!

ingo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

bei exclusiver Öffnung dürften die Lifetime etc. Parameter eigentlich keine Rolle spielen. Gibt es die bei NTX überhaupt ? (ich habe sie noch nie verwendet.)

Zum ZAP - es setzt normalerweise alles zurück, außer den Inhalt von MEMO-Dateien. Die werden trotzdem immer größer. Daher verwende ich statt ZAP eine Kombination aus COPY und Umbenennen:

1. Exclusiv Öffnen
2. COPY to TEMP
3. delete file
4. name TEMP to ...
5. IF file("TEMP.DBF") -> Fehler
Gruß
Hubert
Benutzeravatar
ingo
UDF-Programmierer
UDF-Programmierer
Beiträge: 62
Registriert: Fr, 19. Okt 2007 10:20
Wohnort: Lüneburg
Danksagung erhalten: 1 Mal
Kontaktdaten:

Beitrag von ingo »

Hi brandelh,
danke - so oder ähnlich werde ich auch drangehen...
Gruß, Ingo
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Hubert.
Zum ZAP - es setzt normalerweise alles zurück, außer den Inhalt von MEMO-Dateien.
Das ist falsch! Zap leert auch die Memodateien. Die Stelle, an der man Memodateien getrennt betrachten muß, ist das Pack beim physikalischen Löschen von Datensätzen. Da werden sie nämlich nicht angefaßt.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Tom hat geschrieben:Hallo, Hubert.
Zum ZAP - es setzt normalerweise alles zurück, außer den Inhalt von MEMO-Dateien.
Das ist falsch! Zap leert auch die Memodateien. Die Stelle, an der man Memodateien getrennt betrachten muß, ist das Pack beim physikalischen Löschen von Datensätzen. Da werden sie nämlich nicht angefaßt.
OH MANN OH MANN ... da habe ich gestern aber einen Blackout gehabt.
Natürlich hat TOM völlig Recht. Ich dachte an Pack ... und hörte wohl den Kalk rieseln. :shock:
Gruß
Hubert
Antworten