[Allegro] Wrong Database
Bernhard Eversberg
ev at biblio.tu-bs.de
Mi Mär 5 13:54:31 CET 2014
Am 05.03.2014 13:07, schrieb Fischer, Thomas:
>
> 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 Stochrn 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)
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?
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.
B.E.
Mehr Informationen über die Mailingliste Allegro