RECEIVE RECORD

4D - Documentation   Français   English   German   Spanish   Japanese   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next

Version 3


RECEIVE RECORD {(Tabellenname)}

ParameterTypBeschreibung
TabellennameTabelleTabelle für den zu empfangenden Datensatz,
ohne Angabe Standardtabelle

Beschreibung

Der Befehl RECEIVE RECORD empfängt in Tabelle 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 Tabelle angelegt. Wurde der Datensatz korrekt empfangen, müssen Sie ihn mit dem Befehl SAVE RECORD sichern.

Der komplette Datensatz wird gesendet, 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 Definitionen für die Tabelle beim Ausführen von RECEIVE RECORD.

Anmerkungen

Senden Sie mit diesem Befehl einen Datensatz zu 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, Append document oder Create document geöffnet wurden.

Eine serielle Datenübertragung können Sie unterbrechen:

Manuell durch gleichzeitiges Drücken der Strg-, Alt- und Umschalttaste bzw. auf Macintosh der Wahl-, Befehls- und Umschalttaste.

 Automatisch mit dem Befehl SET TIMEOUT, der bei einer Zeitüberschreitung abbricht.

Die Unterbrechung generiert den Fehler -9994. Sie können ihn mit einer Methode ON ERR CALL abfangen.

Beispiel

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, Untertabellen und/oder verknüpfte Tabellen enthalten, benötigen Sie die Befehle SEND RECORD und RECEIVE RECORD.

Das Handbuch, das Sie gerade lesen, wurde mit 4D und 4D Write erstellt. Da es mehrere Verfasser an verschiedenen Orten auf der Welt schreiben, benötigten 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 RECEIVE VARIABLE, 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äßt 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 Befehle 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, die 
            ` 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) 
                                  ` 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.

Referenz

RECEIVE VARIABLE, SEND RECORD, SEND VARIABLE.

Systemvariablen oder Mengen

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.


4D - Documentation   Français   English   German   Spanish   Japanese   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next