[Allegro] Wrong Database

Fischer, Thomas fischer at sub.uni-goettingen.de
Mi Mär 5 15:06:48 CET 2014


Hallo Herr Eversberg,

> > ich bin bei globalen Ersetzungen beim Speichern wieder auf die
> > ominöse Meldung "Wrong database" gestoßen. Ließe sich statt der
> > (zumindest in dieser Situation) völlig unsinnigen Meldung nicht ein
> > Hinweis geben, an welcher Stelle und/oder bei welchem Buchstaben der
> > Datensatz nicht zur Konfiguration passt? Ohne diese bleibt die
> > Problemsuche ein Stochern im Dunkeln.
> >
> An solcherlei Ursachen liegt es wohl nicht.
> Das Objekt ABASE hat eine Variable Adn (Wert 0,1,2,3) für die
> logische Nummer der Datenbank unter bis zu 4 geöffneten
> Datenbanken. Diese Nummer erbt jeder geladene Datensatz,
> so daß man dem RECORD-Objekt ansieht, zu welchem der 4
> ABASE-Objekte es gehört. (Arbeitet man die ganze Zeit
> mit nur einer Datenbank, ist der Wert stets 0)

Gilt das für jede einzelne A99-Instanz? Ich benutze oft mehrere Versionen von A99 gelichzeitig, benutze aber nie den Befehl "Weitere Datenbank öffnen".
>
> Das Speichern ist eine Methode des Datenbankobjekts,
> Funktion  AwPut()  in  abasew.cpp
> Diese Funktion prüft, ob der übergebene Satz in seiner Adn
> dieselbe Nummer hat wie die Datenbank. Wenn nicht, kommt die
> besagte Meldung. An der Stelle weiß aber die Funktion dann
> nicht, woher die falsche Nummer kommt. Was also könnte sie
> melden?

Da ich eigentlich immer nur eine Datenbank habe, wundert mich das.

> Ein mit "new" erzeugtes Satzobjekt hat übrigens Adn=-1,
> denn es gehört ja noch nicht zu einer von evtl. mehreren Banken.
> Es hat zudem aber die interne Satznummer 0, die der Funktion
> Put() anzeigt, daß es sich um einen Neusatz handelt! Dann
> wird die -1 ignoriert.
>
> Herauszufinden gilt es, woher also der Satz plötzlich eine
> andere Nummer hat. Um das zu eruieren, müßten wir genauer
> wissen, wie der Ablauf Ihrer Aktion ist. Nutzen Sie die
> Funktion "Globale Ersetzung" in a99 oder handelt es sich
> um einen FLEX? Wenn letzteres, müssen wir den mal inspizieren.
> Wenn ersteres, müßten wir die genaue Art der Ersetzung wissen.

Ich benutze normalerweise die globalen Ersetzungen auf einer Ergebnismenge.
Heute habe ich eine größere globale Ersetzung durchgeführt, bei der die besagte Meldung zwar nicht kam, aber auch die geänderten Sätze nicht gespeichert wurden (ich musste sie einzeln speichern). Ich meine, dass dies die globale Ersetzung
", [$"  -> ""
war, mit der ich überflüssige eckige Klammern in einer speziellen Kategorie entfern habe.
Die "Wrong Database" wurde mir angezeigt, als ich in einem Satz
"?" -> ASCII 31
innerhalb einer Kategorie ersetzt habe.
Allerdings muss es da noch Nebenwirkungen gegeben haben, da ich den Satz auch ohne die betreffenden Kategorie nicht speichern konnte.
Gibt es eine Möglichkeit herauszufinden, mit welcher Datenbank A99 "meint" es zu tun zu haben?

Allerdings gab es heute auch noch weitere Irregularitäten: A99 hat sich mehrfach aufgehängt,  ein Indizierungsversuch ist nicht gestartet (das DOS-Fenster blieb leer und es tat sich nichts), Volltextsuche und Export waren teilweise recht zäh.
Ist es eigentlich normal, dass die Volltextsuche in der Ergebnismenge viel langsamer ist als in allen Datenbankdateien?

Falls ich wieder einen konkreten Fall habe, werde ich versuchen den genauer zu dokumentieren.

Mit freundlichen Grüßen
Thomas Fischer






Mehr Informationen über die Mailingliste Allegro