Hallo,
Ich versuche, ein Skript für ein Dialogfenster zu erstellen, das den Benutzer auffordert, zwei Datentabellen aus zwei Listenfeldern auszuwählen, in denen alle derzeit geöffneten Tabellennamen angezeigt werden.Das Dialogfenster, das Listenfeld und der Auswahlprozess funktionieren alle wie vorgesehen. Sobald ich jedoch die beiden ausgewählten Tabellennamen als Variablen habe, stoße ich beim Versuch, sie mit Datentabellenverweisen zu verknüpfen, auf ein Hindernis.Die Datentabellenverweise werden benötigt, um später im Code Arbeiten an den ausgewählten Tabellen durchzuführen.
In den letzten beiden Zeilen treten Probleme mit dem folgenden Fehler für dt1 auf.
Das Argument muss einen Datentabellenverweis beim Zugriff oder bei der Auswertung von „Current Data Table“, Current Data Table/*###*/(SourceData) enthalten.
Mir ist klar, dass SourceData und TargetData Listenobjekte mit jeweils nur einem Element sind. Deshalb habe ich versucht, sie in einen String zu konvertieren, bevor ich sie als Datentabellennamen zuordnete, aber das hat nicht funktioniert.
Jede Hilfe wird sehr geschätzt. Bitte beachten Sie den Skriptabschnitt unten.
openTables = {} ;
Für ( T = 1 , T <= NTable () , T ++, Einfügen in ( openTables , Datentabelle ( T ) << GetName )) ;
Wählen Sie DataWindow aus = Neues Fenster ( „Datentabellen auswählen“ , << Modal ,
SourcePanel = Panel-Box ( „Quelldatentabelle“ ,
SourceListBox = Listenfeld ( openTables , Maximal ausgewählt ( 1 ))) ,
TargetPanel = Panel-Box ( „Zieldatentabelle“ ,
TargetListBox = Listenfeld ( openTables , Maximal ausgewählt ( 1 ))) ,
Line-Up-Box ( NCol ( 2 ) , Button-Box ( "OK" ,
Quelldaten = SourceListBox << GetSelected ;
Zieldaten = TargetListBox << GetSelected ) ,
Button-Box ( "Stornieren" , Stoppen () ))
) ;
dt1 = CurrentDataTable ( Quelldaten ) ;
dt2 = CurrentDataTable ( Zieldaten ) ;
Das hat perfekt funktioniert.Danke Dave!
Zuerst möchten Sie die Funktion nutzen Datentabelle und nicht „Aktuelle Datentabelle“ in den letzten beiden Zeilen.
Das Argument für die Datentabelle muss der Stringname sein. Wenn Sie den Inhalt von SourceData und TargetData anzeigen, sehen Sie, dass es sich um Listen handelt. Dies liegt daran, dass Listenfelder es einem Benutzer im Allgemeinen ermöglichen, mehrere Elemente auszuwählen. Auch wenn Sie die Anzahl der ausgewählten Elemente auf eins beschränken, wird die Auswahl dennoch als Liste zurückgegeben.
Sie können die letzten beiden Zeilen durch Folgendes ersetzen:
dt1 = Data Table( SourceData[1] );
dt2 = Data Table( TargetData[1] );
Jetzt wird also das erste Element der Listen verwendet.
Dies setzt natürlich voraus, dass der Benutzer mindestens ein Element aus jeder Liste ausgewählt hat. Sie können einem modalen Fenster eine Validierung hinzufügen. Fügen Sie nach der Zeile mit der Modal-Nachricht Folgendes hinzu:
<<ONVALIDATE>0 & NItems(TargetData)>0,
isValid = 1
,
isValid = 0;
Beep()
);
isValid
),</ONVALIDATE>
Natürlich können Sie diese Validierung erweitern (z. B. um zu überprüfen, ob Quell- und Zielname nicht identisch sind).