Version 6.7 (Geändert)
RECEIVE RECORD {(Tabellenname)}
Parameter | Typ | Beschreibung | |
Tabellenname | Tabelle | Tabelle 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 mitgespeicherten Unterdatensätze, 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.