BeOpen()
BeOpen() – Cache-Tabelle öffnen
Die Funktion gibt ein Tabellenobjekt aus dem Cache zurück. Das Tabellenobjekt bleibt für weitere Aufrufe von BeOpen() mit der gleichen Workarea solange gesperrt, bis es mit BeClose() freigegeben wird. Weitere Aufrufe von BeOpen() vor BeClose() erzeugen eigene Tabellenobjekte.
Tabellen, die mit BeOpen() geöffnet werden, dürfen NICHT für die Bearbeitung (Edit/Post) von Daten verwendet werden!
Hinweis
Die Funktionen BeOpen() bzw. BeClose() dienen zur Verbesserung der Ablaufgeschwindigkeit von datenbankgestützen Programmen. Damit steht im Codeblock ein Datenbank-Cache zur Verfügung, der das häufige Öffnen und Schliessen von Tabellen verhindern soll. Eine Tabelle, die einmal geöffnet wurde, wird im Cache offen gehalten, bis business express beendet wird.
Tabellenobjekte, die mit BeOpen() erzeugt wurden, dürfen NIE über DestroyObject() gelöscht werden. Sie müssen unbedingt mit BeClose() zurückgegeben werden. Events werden nach BeClose() nicht mehr ausgeführt. Die Verwendung von Objektvariablen nach BeClose() ist nicht mehr zulässig und kann zu falschen Ergebnissen führen. Tabellenobjekte aus dem Cache sollten nach Möglichkeit nicht an Transaktionen beteiligt sein. Eine Änderung der Objekteigenschaften ist zwar möglich, muss jedoch vor BeClose() rückgängig gemacht werden! Events, Indices, Scopes, Ranges und Filter dürfen zugewiesen bleiben und werden automatisch entfernt.
Es sollte durch Fehlerauffangroutinen sichergestellt werden, das für jeden BeOpen()-Befehl ein zugehöriger BeClose()-Befehl ausgeführt wird !
Parameter | Beschreibung |
---|---|
aWorkArea:N | WorkArea, die geöffnet werden soll |
aIndex:U | Indexnummer oder Indexname; default = 'DAB011' (falls vorhanden) |
aGoTop:L | Tabelle wird auf den Anfang positioniert; default = false |
Rückgabewert
Objekt - Geöffnete Tabelle
Beispiel
// Performance-Vergleich BeOpen() / DbOpen()
| aDab010, i, aTime, aCount, aBeOpenTime, aOpenTime |
aCount := 15,
aTime := GetExTimer(),
for i := 1 to aCount do
aDab010 := BeOpen(waDAB010),
startseq,
Writeln(aDab010:ArtNr)
always,
BeClose(aDab010)
stopseq,
next,
aBeOpenTime := Str(GetExTimer() - aTime),
aTime := GetExTimer(),
for i := 1 to aCount do
aDab010 := DBOpen(waDAB010),
startseq,
Writeln(aDab010:ArtNr)
always,
DestroyObject(aDab010)
stopseq,
next,
aOpenTime := Str(GetExTimer() - aTime),
WriteLn(Replicate('=', 30) + crlf +
'Tabelle DAB010 ' + Str(aCount) + ' Mal öffnen:' + crlf +
'aus Cache: ' + Chr(9) + aBeOpenTime + crlf +
'konventionell: ' + Chr(9) + aOpenTime + crlf +
Replicate('=', 30)),