Version 5.8 / Teil 2: Implizite Typkonvertierung

Integrierte Typkonvertierung

Wie bereits im ersten Teil des Blog-Artikels zum Release der Version 5.8 angedeutet, wurden für die Verarbeitung von 64-Bit Datensatz-IDs auch Änderungen am conzept 16-Befehlssatz durchgeführt. Warum dies notwendig ist, beschreibt der vorliegende zweite Teil.

Einleitung

Das folgende Beispiel 1 demonstriert die Problematik.

main
  local
  {
    tPrime : int;
  }
{
  tPrime # RecInfo(MyTable,_RecGetPrime);
  // Verarbeitung von tPrime
  // ...
}

Handelt es sich bei MyTable um eine Tabelle mit 64-Bit-Datensatz-IDs, muss der Befehl RecInfo() prinzipiell auch in der Lage sein, 64-Bit-Werte zurückzuliefern. Deshalb wurde der Befehl angepasst und besitzt nun einen 64-Bit-Rückgabewert (Beispiel 2).

main
  local
  {
    tPrime : bigint;
  }
{
  tPrime # RecInfo(MyTable,_RecGetPrime);
  // Verarbeitung von tPrime als 64-Bit Wert.
  // ...
}

Durch die Umstellung der lokalen Variable tPrime von int auf bigint kann nun auch der 64-Bit Prime-Counter ausgelesen werden. Allerdings müssten beim Umstieg auf die Version 5.8 alle Prozeduren angepasst und neu übersetzt werden, die RecInfo() aufrufen. Damit dies nicht notwendig ist und der vorhandene Prozedur-Code kompatibel bleibt, wird mit der Version 5.8 die implizite Typkonvertierung eingeführt. Diese erlaubt die Zuweisung eines bigint-Wertes an einen int-Wert (und auch umgekehrt) ohne den Aufruf einer Konvertierungsfunktion (Beispiel 3).

main
  local
  {
    tVal32 : int;
    tVal64 : bigint;
  }
{
  tVal64 # 4711;
  tVal32 # tVal64;
}

Vor der Version 5.8 wäre der Aufruf der Konvertierungsfunktion CnvIB() notwendig, um die Prozedur fehlerfrei zu übersetzen. Mit der impliziten Typkonvertierung ist dies nicht mehr notwendig, da die Variable tVal64 bei der Zuweisung implizit nach int konvertiert wird. Überschreitet tVal64 den Wertebereich von tVal32, wird der Laufzeitfehler “Wert zu groß” generiert. Da die Typkonvertierung Konstanten mit einschließt, funktioniert auch die Zuweisung des Wertes 4711 an tVal64 ohne die Angabe von \b. Gleiches gilt auch für die Datentypen byte und word. Diese werden ebenfalls implizit nach und von bigint gewandelt. Die Wandlung von byte und word nach int und zurück war bereits vor der Version 5.8 ohne Konvertierungsfunktion möglich.

Durch die implizite Typkonvertierung kann somit der Code aus Beispiel 1 unverändert und ohne Neuübersetzung in Version 5.8 ausgeführt werden. Erst bei Aktivierung der 64-Bit Datensatz-IDs der betreffenden Tabelle muss der Prozedurtext angepasst werden, um Laufzeitfehler bei der Zuweisung von RecInfo() zu vermeiden.

Eine detaillierte Beschreibung der impliziten Typkonvertierung enthält die Online-Hilfe.

Befehle, Ereignisse und Eigenschaften

Nicht nur der Befehl RecInfo() ist von 64-Bit-IDs betroffen. Auch weitere Befehle sowie Ereignisse und Eigenschaften wurden angepasst.

Befehle für die Datensatzverarbeitung

  • RecInfo : Der Rückgabewert und das 3. Argument wurden auf bigint geändert
  • RecRead : Der Typ des 4. Argumentes, das u.a. zur Angabe der Datensatz-ID dient, wurde auf bigint geändert.

Befehle der Mehrfachselektion für RecList und DataList

Die Mehrfachselektion für das RecList-Objekt baut auf eine Cte-Liste auf. Die Datensatz-ID wird hier in der Eigenschaft spID abgelegt.

  • spID : Der Typ der Eigenschaft wurde auf bigint geändert.
  • CteInsertItem : Das 2. Argument zur Angabe der ID-Eigenschaft wurde auf bigint geändert.
  • CteInsertNode : Das 2. Argument zur Angabe der ID-Eigenschaft wurde auf bigint geändert.
  • WinMsdInsert : Das 2. Argument zur Angabe des neu aufzunehmenden Elementes wurde auf bigint geändert.
  • WinMsdDelete : Das 2. Argument zur Angabe des zu entfernenden Elementes wurde auf bigint geändert.
  • WinMsdRead : Das 2. Argument zur Angabe des zu lesenden Elementes wurde auf bigint geändert.

Ereignisse

Einige Ereignisse von Oberflächenobjekten erhalten beim Aufruf im Argument aID bzw. aRecID eine Datensatz-ID. Dort ist es nun möglich das Argument als bigint zu definieren. Der folgende Code-Ausschnitt zeigt dies exemplarisch am Ereignis EvtLstSelect.

sub EvtLstSelect
(
  aEvt                 : event;    // Ereignis
  aID                  : bigint;   // Record-ID des Datensatzes oder Zeilennummer
)
: logic;                           // Wird nicht ausgewertet
{
  // aID kann als int oder bigint deklariert werden.
  return(true);
}

Werden die Argumente der betreffenden Ereignisse als int deklariert, wird ein Laufzeitfehler ausgelöst, wenn die übergebene Datensatz-ID außerhalb des Wertebereiches von int liegt. Dies ist nur dann der Fall, wenn die 64-Bit-Datensatz-IDs in der Tabelle aktiviert sind und auch tatsächlich Datensätze mit einer Datensatz-ID >= 0x80000000\b existieren. Die folgenden Ereignisse wurden angepasst:

  • EvtHelpTip
  • EvtKeyItem
  • EvtLstDataInit
  • EvtLstEditFinished
  • EvtLstRecControl
  • EvtLstSelect
  • EvtLstSelectRange
  • EvtMenuContext
  • EvtMouseItem
API-Client und DLL-Schnittstelle

Die Schnittstelle des API-Client und die DLL-Schnittstelle (DllCall()) wurden um die Funktionen C16_RecInfo64() sowie C16_RecRead64() erweitert.

Klicken Sie hier, um die Nutzungsbedingungen für unseren Blog zu lesen.

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Leave the field below empty!

Wünsche, Fragen oder Feedback sind willkommen:

Nutzungsbedingungen der Kommentarfunktion im Blog

1. Allgemeines

Vectorsoft AG („Anbieter“) stellt für Internetnutzer („Nutzer“) auf der Website
vectorsoft.de einen öffentlichen Blog bereit. Der öffentliche Blog dient dem
Informations- und Gedankenaustausch. Die Nutzer, welche sich mit Beiträgen und
Kommentaren beteiligen, verpflichten sich dazu, die Blog-Nutzungsbedingungen
einzuhalten und tragen die Verantwortung für die Richtigkeit und Angemessenheit
sowie Freiheit von Rechtsverletzungen ihrer Beiträge. Mit Nutzung der
Kommentarfunktion in unserem Blog akzeptieren Sie diese Nutzungsbedingungen.

2. Netiquette

Wir bitten Sie von persönlichen Angriffen und Provokationen aufgrund anderer
Meinungen abzusehen. Bitte argumentieren Sie sachlich und bewegen Sie sich auf
der Basis einer konstruktiven Diskussionskultur. Ihr Kommentar sollte stets im
Zusammenhang mit dem jeweiligen Thema sein, um Ausschweifungen in andere
Themenbereiche zu vermeiden. Das mehrmalige Posten desselben Kommentars
oder mehrerer ähnlicher Kommentare ist nicht erlaubt.

3. Verbot rechtswidriger Inhalte

Mit Absenden Ihres Kommentars bestätigen Sie, dass Sie keine Urheberrechte oder andere Rechte Dritter verletzen. Volksverhetzende, rassistische Äußerungen, Anleitungen zu Straftaten und deren Verherrlichung, Gewaltdarstellungen, pornografische Inhalte und Äußerungen, die Persönlichkeitsrechte verletzen sind untersagt.

4. Keine Werbung

Die Nutzung der Kommentarfunktion ist für kommerzielle oder parteipolitische
Zwecke nicht erlaubt. Werbliche Beiträge aller Art werden von uns umgehend
gelöscht.

5. Angaben zum Namen

Bei der Eingabe Ihres Namens achten Sie auf die zuvor genannten Grundsätze.

6. Quellenangaben

Bitte geben Sie bei der beabsichtigten Veröffentlichung von Zitaten oder Beiträgen
Dritter die jeweiligen Quellen an und erläutern dessen Bezug zum Blogbeitrag.

7. Verstoß gegen die Nutzungsbedingungen

Beiträge, die gegen diese Richtlinie verstoßen werden umgehend gelöscht. Sollten
Sie selbst Verstöße bemerken, so senden Sie uns bitte den Link des betreffenden
Kommentars per E-Mail an . Wir weisen ausdrücklich daraufhin, dass wir einzelne Nutzer bei wiederholten oder schweren Verstößen gegen diese
Nutzungsbedingungen ausschließen werden.

Stand: Sept. 2024

Deine Trial Version - jetzt anfordern!

Teste yeet - unverbindlich und kostenfrei

IHRE EVALUIERUNGSLIZENZ - JETZT ANFORDERN!

TESTEN SIE DIE CONZEPT 16 VOLLVERSION - UNVERBINDLICH und KOSTENFREI

Melden Sie sich bei unserem Newsletter an

Anrede*
     
Zustimmung zur Datenverarbeitung gem. DSGVO*



WordPress Cookie-Hinweis von Real Cookie Banner