SET RELATION-Befehl
Erstellt eine Beziehung zwischen zwei geöffneten Tabellen.
SET RELATION TO [eExpression1 INTO nWorkArea1 | cTableAlias1
[, eExpression2 INTO nWorkArea2 | cTableAlias2 ...]
[IN nWorkArea | cTableAlias] [ADDITIVE]]
Parameter
eExpression1
Gibt den relationalen Ausdruck an, über den eine Beziehung zwischen der Master- (übergeordneten) und der Detailtabelle hergestellt wird. Der relationale Ausdruck ist normalerweise der Indexausdruck des Hauptindexes der Detailtabelle.Der Index der Detailtabelle kann ein einfacher Index (IDX), ein strukturierter Mehrfachindex (CDX) oder ein unabhängiger Mehrfachindex sein. Wenn es sich um einen Mehrfachindex handelt, geben Sie zum Sortieren der Detailtabelle den richtigen Indexnamen an. Mit SET ORDER können Sie den Indexnamen angeben, der die Detailtabelle sortiert.
Gehen Sie von den Tabellen
customer
undorders
im Abschnitt "Hinweise" weiter unten aus. Angenommen, die Detailtabelleorders
wurde indiziert und mit dem folgenden Befehl nach der Kundennummer sortiert:SET ORDER TO TAG cust_id
Um eine Beziehung der Tabellen
customer
undorders
über die Kundennummer herzustellen, können Sie den Arbeitsbereich auswählen, der die Master-Tabellecustomer
enthält, oder mit der IN-Klausel den Arbeitsbereich oder Alias der Master-Tabelle angeben und SET RELATION eingeben, wobei der Indexausdruck durch den folgenden relationalen Ausdruck angegeben wird:SET RELATION TO cust_id INTO orders
Die Detailtabelle muss indiziert sein, es sei denn, der relationale Ausdruck ist numerisch. Wenn Sie SET RELATION mit einem nicht-numerischen relationalen Ausdruck eingeben und die Detailtabelle nicht über einen Index sortiert ist, zeigt Visual FoxPro eine Fehlermeldung an.
Ist eExpression1 ein numerischer Ausdruck, wird dieser ausgewertet, wenn der Datensatzzeiger in der Master-Tabelle bewegt wird. Daraufhin wird der Datensatzzeiger der Detailtabelle auf den Datensatz mit der Nummer eExpression1 gesetzt.
INTO nWorkArea1 | cTableAlias1
Gibt die Arbeitsbereichnummer (nWorkArea1) oder den Tabellenalias (cTableAlias1) der Detailtabelle an.eExpression2 INTO nWorkArea2 | cTableAlias2 ...
Gibt einen relationalen Ausdruck (eExpression2) und eine Detailtabelle oder Detailtabellen an, um eine zusätzliche Beziehung zwischen Master-Tabelle und Detailtabellen aufzubauen. Mit einem einzigen SET RELATION-Befehl können Sie mehrere Beziehungen zwischen einer Master-Tabelle und verschiedenen Detailtabellen erstellen. Geben Sie vor jeder Beziehung ein Komma ein.nWorkArea2 gibt eine Arbeitsbereichnummer und cTableAlias2 einen Tabellenalias für die Detailtabelle an.
IN nWorkArea
Gibt den Arbeitsbereich der Master-Tabelle an.IN cTableAlias
Gibt den Alias der Master-Tabelle an.Mit der IN-Klausel können Sie eine Beziehung erstellen, ohne vorher den Arbeitsbereich der Master-Tabelle auszuwählen. Wenn Sie nWorkArea und cTableAlias nicht angeben, muss die Master-Tabelle im aktuell ausgewählten Arbeitsbereich geöffnet sein.
ADDITIVE
Hält beim Erstellen der angegebenen Beziehung alle bestehenden Beziehungen im aktuellen Arbeitsbereich aufrecht. Ohne Angabe von ADDITIVE werden alle Beziehungen im aktuellen Arbeitsbereich aufgehoben, wenn die angegebene Beziehung erstellt wird.
Hinweise
Bevor Sie eine Beziehung erstellen können, müssen zwei Tabellen geöffnet sein: die Master-Tabelle (übergeordnete Tabelle) und in einem anderen Arbeitsbereich die Detailtabelle.
Verknüpfte Tabellen haben üblicherweise ein gemeinsames Feld. Angenommen, eine Tabelle namens customer
enthält Kundeninformationen. Sie enthält Felder für den Namen, die Adresse und eine eindeutige Kundennummer. Eine zweite Tabelle namens orders
enthält Bestellinformationen. Auch diese Tabelle besitzt ein Feld für die Kundennummer sowie Felder für das Datum und Lieferinformationen.
SET RELATION verknüpft die beiden Tabellen über das gemeinsame Kundennummer-Feld. Um die Beziehung herzustellen, muss die Detailtabelle nach dem gemeinsamen Feld indiziert sein. Nachdem Sie die Beziehung hergestellt haben und den Datensatzzeiger auf einen Datensatz mit einer bestimmten Kundennummer in der Master-Tabelle customer
bewegen, bewegt sich der Datensatzzeiger in der Detailtabelle orders
auf den Datensatz mit derselben Kundennummer. Wird kein übereinstimmender Datensatz in der Detailtabelle gefunden, wird ihr Datensatzzeiger an das Ende der Tabelle gesetzt.
Geben Sie SET RELATION TO ohne Argumente ein, um alle Beziehungen im aktuell ausgewählten Arbeitsbereich aufzuheben. Mit SET RELATION OFF können Sie eine einzelne Beziehung zwischen einer Master- und einer Detailtabelle aufheben.
Siehe auch
INDEX | RELATION( ) | SET ORDER | SET RELATION OFF | SET SKIP | TARGET( )