+1 800 256 3608 (toll-free in North America) or +49 7531 90 60 10| service@combit.com

LlDbAddTable - Wie entferne ich die Tabellen ohne LlJobClose


(Guest) #1

Hallo,

wir verwenden LL seit über einem Jahrzehnt und haben noch viele Formulare aus der Zeit ab LL7. Nach einem Sprung von LL10 auf LL17 nutzen wir nun auch den Berichtscontainer, um Kreuztabellen zu verwenden (übrigens eine tolle Funktion). Um den Berichtscontainer zu nutzen, definieren wir eine Tabelle “Daten” mit der Funktion “LlDbAddTable”, so weit funktioniert alles perfekt.

Nachdem ich aber einmalig ein Formular mit Kreuztabelle verwendet habe, also mit “LlDbAddTable” eine zusätzliche Tabelle definiert wurde, liefert LL17 bei Druck aller Listen-Formulare ohne Kreuztabellenfunktionalität den Fehler 55: “LL_ERR_BADDATABASESTRUCTURE”. Erst wenn der Job geschlossen und neu geöffnet wird, können die alten Listen-Formulare verwendet werden.

Vor langer Zeit habe ich in der Knowledgebase gelesen, dass vermieden werden soll, permanent Jobs zu öffnen und zu schließen, da dies Performance-Verluste und eventuell Speicherlöcher verursachen würde. Ob dies Verhalten noch aktuell ist, weiß ich nicht, wir verwenden aber (noch) weiterhin diesen Mechanismus: beim Programmstart wird ein Job geöffnet und erst beim Programmende wieder geschlossen.

Nun meine Frage: gibt es eine Möglichkeit, die mit “LlDbAddTable” definierten Tabellen zu entfernen ohne den Job zu schließen? Oder eigentlich noch besser: was muss ich ändern, um in der oben beschriebenen Konstellation den Fehler 55 “LL_ERR_BADDATABASESTRUCTURE” nicht mehr zu erhalten?

Viele Grüße,
ThN.


(Guest) #2

Um Tabellen aus der LL bekannten Datenstruktur zu entfernen, kann man LlDbAddTable() mit NULL aufrufen… dann sollten die Tabellen rausfliegen -> sollte so aber auch in der Programmierer Referenz dokumentiert sein.

PS: Einen “Schutzjob” für LL beim Anwendungsstart zu öffnen und diesen erst beim Beenden der Anwendung wieder zu schließen ist durch aus sinnvoll - so werden bswp. etwaige Module nur einmal in den Speicher geladen… Und dann kann man während des Session einfach zusätzliche Jobs öffnen/schließen (natürlich absolut synchron!) so wie man das braucht.


(Guest) #3

Hallo Oliver,

vielen Dank für die schnelle und richtige Antwort. Leicht zu übersehen befindet sich in der Tat der Hinweis “Wenn Sie einen Leerstring oder NULL übergeben, wird der Tabellenpuffer gelöscht” in der Dokumentation.

Danke,
ThN