4D v16.3

RECEIVE RECORD

Home

 
4D v16.3
RECEIVE RECORD

RECEIVE RECORD 


 

RECEIVE RECORD {( Tabellenname )} 
Parameter Typ   Beschreibung
Tabellenname  Tabelle in Tabelle für den zu empfangenden Datensatz
Ohne Angabe Standardtabelle

Der Befehl RECEIVE RECORD empfängt in Tabellenname einen Datensatz aus einer seriellen Schnittstelle oder von einem durch den Befehl SET CHANNEL geöffneten Dokument. Der Datensatz muss mit SEND RECORD gesendet worden sein. Führen Sie RECEIVE RECORD aus, wird automatisch eine neuer Datensatz für Tabellenname angelegt. Wurde der Datensatz korrekt empfangen, müssen Sie ihn mit dem Befehl SAVE RECORD sichern.

Der komplette Datensatz wird empfangen, dazu gehören auch alle im oder mit dem Datensatz gespeicherten Bilder oder BLOBs.

Wichtig: Werden Datensätze mit den Befehlen SEND RECORD und RECEIVE RECORD gesendet bzw. empfangen, müssen die Struktur der Quell- bzw. der Zieltabelle zueinander kompatibel sein. Ist das nicht der Fall, konvertiert 4D die Werte gemäß den Tabellendefinitionen beim Ausführen von RECEIVE RECORD.

Anmerkungen:

  • Empfangen Sie mit diesem Befehl einen Datensatz aus einem Dokument, muss es zuvor mit dem Befehl SET CHANNEL geöffnet werden. Sie können RECEIVE RECORD nicht für Dokumente verwenden, die mit Open document, Create document oder Append document geöffnet wurden.
  • Der Benutzer kann während der Ausführung von RECEIVE RECORD den Empfang unterbrechen, und zwar unter Windows durch die Tastenkombination Strg-, Alt- und Umschalttaste, auf Macintosh Wahl-, Befehls- und Umschalttaste. Die Unterbrechung generiert den Fehler -9994. Sie können ihn mit einer Methode ON ERR CALL abfangen.

Die Kombination von SEND VARIABLE, SEND RECORD, RECEIVE VARIABLE und RECEIVE RECORD ist ideal zum Archivieren von Daten oder für den Austausch von Daten zwischen identischen Datenbanken im Einzelplatzbetrieb an verschiedenen Orten. Sie können Daten zwar auch mit den Befehlen EXPORT TEXT und IMPORT TEXT austauschen. Sobald sie jedoch Bilder und/oder verknüpfte Tabellen enthalten, sind die Befehle SEND RECORD und RECEIVE RECORD besser geeignet.

Nehmen wir z.B. eine Dokumentation, die auf 4D und 4D Write basiert. Da mehrere Verfasser an verschiedenen Orten auf der Welt daran arbeiten, benötigen wir einen einfachen Weg für den Datenaustausch zwischen den verschiedenen Datenbanken. Nachfolgend sehen Sie eine vereinfachte Darstellung der Datenbankstruktur:

Die Tabelle [Commands] enthält die Beschreibung jedes Befehls oder Abschnitts. Die Tabellen [CM US Params] und [CM FR Params] enthalten jeweils die Liste der Parameter für jeden Befehl in Englisch und Französisch. Die Tabelle [CM See Also] enthält die Befehle, die für jeden Befehl als Referenz aufgeführt werden. Für den Datenaustausch werden die Datensätze aus der Tabelle [Commands] und die damit verknüpften Datensätze gesendet. Dazu verwenden wir die Befehle SEND RECORD und RECEIVE RECORD. Zusätzlich benützen wir SEND VARIABLE und SEND RECORD, um das Import-/Exportdokument mit Tags zu markieren.

Hier ist die vereinfachte Projektmethode für den Datenexport:

  ` Projektmethode CM_EXPORT_SEL
  ` Diese Methode arbeitet mit der aktuellen Auswahl der Tabelle [Commands]
 
 SET CHANNEL(12;"") ` Lässt den Benutzer ein Kanaldokument erstellen und öffnen
 If(OK=1)
  ` Markiere Dokument mit Variable, die den Inhalt angibt
  ` Hinweis: Die Prozessvariable BUILD_LANG gibt an, ob US (Englisch) oder FR (Französisch) Daten gesendet werden
    $vsTag:="4DV6COMMAND"+BUILD_LANG
    SEND VARIABLE($vsTag)
  ` Sende Variable, die anzeigt wie viele [Commands] gesendet werden
    $vlNbCmd:=Records in selection([Commands])
    SEND VARIABLE($vlNbCmd)
    FIRST RECORD([Commands])
  ` Für jeden Befehl
    For($vlCmd;1;$vlNbCmd)
  ` Sende den [Commands] Datensatz
       SEND RECORD([Commands])
  ` Wähle alle verknüpften Datensätze aus
       RELATE MANY([Commands])
       [ ` Sende je nach Sprache eine Variable, welche die Anzahl der folgenden Parameter angibt
       Case of
          :(BUILD_LANG="US")
             $vlNbParm:=Records in selection([CM US Params])
          :(BUILD_LANG="FR")
             $vlNbParm:=Records in selection([CM FR Params])
       End case
       SEND VARIABLE($vlNbParm)
  ` Sende die [CM US Params] Datensätze (falls vorhanden)
       For($vlParm;1;$vlNbParm)
          Case of
             :(BUILD_LANG="US")
                SEND RECORD([CM US Params])
                NEXT RECORD([CM US Params])
             :(BUILD_LANG="FR")
                SEND RECORD([CM FR Params])
                NEXT RECORD([CM FR Params])
          End case
       End for
  ` Sende eine Variable, die die Anzahl der folgenden Referenzen angibt
       $vlNbSee:=Records in selection([CM See Also])
       SEND VARIABLE($vlNbSee)
  ` Sende die [CM See Also] Datensätze (falls vorhanden)
       For($vlSee;1;$vlNbSee)
          SEND RECORD([CM See Also])
          NEXT RECORD([CM See Also])
       End for
  ` Gehe zum nächsten [Commands] Datensatz und fahre fort mit Export
       NEXT RECORD([Commands])
    End for
    SET CHANNEL(11) `Schließe Dokument
 End if

Hier ist die vereinfachte Projektmethode für den Datenimport

  ` Projektmethode CM_IMPORT_SEL
 
 SET CHANNEL(10;"") ` Lässt den Benutzer ein vorhandenes Dokument öffnen
 If(OK=1) ` War ein Dokument offen
    RECEIVE VARIABLE($vsTag` Versuche, die erwartete Tag Variable zu erhalten
    If($vsTag="4DV6COMMAND@") ` War es das richtige Tag?
       $CurLang:=Substring($vsTag;Length($vsTag)-1) ` Entnehme Sprache aus dem Tag
       If(($CurLang="US")|($CurLang="FR")) ` War es eine gültige Sprache?
          RECEIVE VARIABLE($vlNbCmd)
          &NBSP` Wieviele Befehle gibt es in diesem Dokument?
          If($vlNbCmd>0) ` Ist mindestens einer vorhanden
             For($vlCmd;1;$vlNbCmd` Für jeden archivierten [Commands] Datensatz empfange den Datensatz
                RECEIVE RECORD([Commands])
  ` Rufe Unterroutine, die den neuen Datensatz sichert oder seinen Inhalt in bereits vorhandenen Datensatz kopiert
                CM_IMP_CMD($CurLang` Empfange Anzahl der Parameter (falls vorhanden)
                RECEIVE VARIABLE($vlNbParm)
                If($vlNbParm>=0)
  ` Rufe Unterroutine, die RECEIVE RECORD aufruft, dann den neuen Datensatz sichert oder in bereits vorhandene Datensätze kopiert
                   CM_IMP_PARM($vlNbParm;$CurLang)
                End if
  ` Erhalte Anzahl von “Referenz” (falls vorhanden)
                RECEIVE VARIABLE($vlNbSee)
                If($vlNbSee>0)
  ` Rufe Unterroutine, die RECEIVE RECORD aufruft, dann den neuen Datensatz sichert oder in bereits vorhandene Datensätze kopiert
                   CM_IMP_SEEA($vlNbSee;$CurLang)
                End if
             End for
          Else
             ALERT("Anzahl der Befehle in Exportdokument ist ungültig.")
          End if
       Else
          ALERT("Sprache in Exportdokument ist unbekannt.")
       End if
    Else
       ALERT("Dieses Dokument ist KEIN Exportdokument für Befehle.")
    End if
    SET CHANNEL(11) ` Schließe Dokument
 End if

Beachten Sie, dass wir beim Datenempfang weder die Systemvariable OK testen, noch versuchen, Fehler abzufangen. Da wir jedoch Variablen im Dokument gespeichert haben, welches das Dokument selbst beschreibt, ist die Fehlerwahrscheinlichkeit sehr gering. Öffnet der Benutzer z.B. ein falsches Dokument, stoppt der erste Test sofort die Operation.

Die Systemvariable OK hat den Wert 1, wenn der Datensatz empfangen wurde. Wurde die Kommunikation unterbrochen oder trat ein Übertragungsfehler auf, ergibt OK den Wert 0.



Siehe auch 

RECEIVE VARIABLE
SEND RECORD
SEND VARIABLE

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Kommunikation
Nummer: 79

Dieser Befehl ändert die Systemvariable OKDieser Befehl ändert die Systemvariable ErrorThis command can be run in preemptive processes

 
GESCHICHTE 

Erstellt: < 4D v6

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)