Bin ich verrückt oder wie ist das möglich? - Brauchen Sie Hilfe bei der Suche nach merkwürdigem VerhaltenProblem in meiner App, dass ich den ganzen Tag Probleme beheben konnte. Ich beschränkte mich auf dieses sehr qeirdische Verhalten. Wenn ich etwas vermisse, sollte dies nicht so sein.
Ich habe zwei Tische geöffnet: "Baseball" und "Basketball".
Ich habe dieses Skript:
Clear Log();
//dt_current=Data Table("Basketball");
/*Two tables opened: Baseball and Basketball. The table named "Basketball" is selected as current table*/
dt_working=Data Table("Baseball");
Show("This is the dt_working table:");
Show(dt_working<<GET name=""></GET>Offensichtlich versuche ich, ein Col List Box mit Spalten aus Baseball Table zu erstellen.
Aber das ist es, was mir mein Log (und der Rest der App) zeigt:
"This is the dt_working table:";
dt_working << Get Name() = "Baseball";
"Columns names:";
colNamesList = {Player, Batting};
"This is what dt_working still is:";
dt_working << Get Name() = "Baseball";
"But this is what I got in Col List Box:";
colListX << Get Items = {"School", "CSN", "Durham Sun", "Durham Herald", "Washington Post", "USA Today", "Sports Magazine", "In Sport", "UPI", "AP", "Sports Illustrated"};Auch wenn ich angegeben habe, dass dt_working Baseball ist und gesagt hat, dass Col List Box mit der Tabelle dt_working erstellt wird, füllt es Col List Box mit Spalten aus der aktuellen Datentabelle, die ich oben in der Symbolleiste ausgewählt habe.
Eine andere App, die im Allgemeinen über einen anderen Code verfügt, aber dieser bestimmte Teil ist genau derselbe und funktioniert anders. Kann mir jemand weiter helfen? Warum sollte das Col List Box nicht aus der Tabelle, die ich ausfüllen soll, ausgefüllt werden, sondern aus der aktuellen Tabelle?
Langfristig versuche ich, Spalten aus Tabellen anzuzeigen, die ich in einem anderen Listenfeld auswähle. Eine ähnliche Funktion in einer anderen App funktioniert einwandfrei. Egal auf welche Tabelle ich klicke (und einen Code ähnlich dem von mir zitierten ausführen), es werden immer Spalten aus der oben ausgewählten Tabelle angezeigt.
Vielen Dank,
M.
Re: Bin ich verrückt oder wie ist das möglich? - Brauchen Sie Hilfe bei der Suche nach merkwürdigem Verhalten @MathStatChem schrieb:
Wenn Sie sich die Syntax im Skripthandbuch anschauen, scheint die Syntax die Verwendung einer Datentabellenreferenz nicht zuzulassen. Sie müssen die Syntax verwenden:
y = Col List Box (, ...)
Die Datentabelle () in den Argumenten für das Col List Box () ist keine Funktion, sondern ein benanntes Argument, um Col List Box () wissen zu lassen, dass das Argument als Datentabelle interpretiert werden sollte. Daher wird eine Datentabellenreferenz als Argument verwendet. Hier ist ein Beispiel:
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt2 = Open( "$SAMPLE_DATA\Solubility.jmp" );
New Window("Example", Col List Box( Data Table( dt ), all ) );
Die << Name abrufen-Nachricht ist nicht erforderlich.
Wir werden versuchen, automatisch zu ermitteln, ob das erste Argument eine Datentabellenreferenz ist.
Dank an @Justin_Chilton für die Erklärung.
Re: Bin ich verrückt oder wie ist das möglich? - Brauchen Sie Hilfe bei der Suche nach merkwürdigem Verhalten
@ gzmorgan0 schrieb:
Ja, das war meine Empfehlung, ColListBox zu verwenden (Datentabelle (dt_ref << getname), ...)
Und es funktioniert! Du hast mich heute zweimal gerettet!
Re: Bin ich verrückt oder wie ist das möglich? - Brauchen Sie Hilfe bei der Suche nach merkwürdigem VerhaltenOkay, vielleicht kein Bug, ich muss alte E-Mails nachschlagen, aber ich habe irgendwo eine Referenz mit ColListBox (dt, ...) gefunden und JMP markiert.
Ja, das war meine Empfehlung, ColListBox zu verwenden (Datentabelle (dt_ref << getname), ...)
Re: Bin ich verrückt oder wie ist das möglich? - Brauchen Sie Hilfe bei der Suche nach merkwürdigem VerhaltenWenn Sie sich die Syntax im Skripthandbuch ansehen, scheint die Syntax die Verwendung einer Datentabellenreferenz nicht zuzulassen. Sie müssen die Syntax verwenden:
y = Col List Box (, ...)
also mit diesem Code
y=Col List Box( Data Table(dt_working<<GET name=""></GET>
gibt Ihnen das gewünschte Ergebnis. Ich glaube nicht, dass es ein Fehler ist, es ist nur eine klobige Syntax.
Re: Bin ich verrückt oder wie ist das möglich? - Brauchen Sie Hilfe bei der Suche nach merkwürdigem VerhaltenAh, ok, ich verstehe. Das Col-List-Feld verwendet also die aktuelle Datentabelle, nicht die Datentabellenreferenz. Eine schnelle Lösung besteht darin, diese Anweisung direkt vor der Anweisung colList in das Skript einzufügen:
Aktuelle Datentabelle (dt_working);
Re: Bin ich verrückt oder wie ist das möglich? - Brauchen Sie Hilfe bei der Suche nach merkwürdigem VerhaltenJa, ich hatte das andere Skript geöffnet, aber da funktionierte es
beabsichtigt. Ich werde Georgiens Workaround ausprobieren und Ihnen mitteilen, ob es funktioniert. Ich hatte ein
starker Verdacht, es war ein großer, es war mir nicht klar, was ausgelöst wurde
da genau der gleiche Code in einer anderen App funktioniert hat.Re: Bin ich verrückt oder wie ist das möglich? - Brauchen Sie Hilfe bei der Suche nach merkwürdigem VerhaltenIch habe Ihren Code mit der Baseball.JMP-Tabelle aus den Beispieldaten ausgeführt und konnte das Verhalten, das Sie sehen, nicht sehen. Hier ist meine Protokollausgabe.
"This is the dt_working table:";
dt_working << Get Name() = "Baseball";
"Columns names:";
colNamesList = {Player, Batting};
"This is what dt_working still is:";
dt_working << Get Name() = "Baseball";
"But this is what I got in Col List Box:";
colListX << Get Items = {"Player", "Batting"};Haben Sie ein anderes Skript geöffnet, in dem Sie die colListX-Referenz erstellt haben, möglicherweise mit einer anderen Tabelle?
Am besten verwenden Sie den Befehl Names Default to Here (1) am Anfang des Skripts. Wenn Sie das nicht tun, sind alle Ihre Variablen global und zwei verschiedene Skripts können sich gegenseitig über die Variablen bewegen.
Re: Bin ich verrückt oder wie ist das möglich? - Brauchen Sie Hilfe bei der Suche nach merkwürdigem VerhaltenIch würde das einen Bug nennen. Ich wurde letztes Jahr davon erwischt. Es gibt jedoch eine Lösung. Das Problem ist, dass ColListBox den Tabellenverweis dt_working nicht auswertet oder analysiert. Meine Empfehlung ist die Verwendung der Syntax ColListBox (Datentabelle (dt_working << get name), .... oder um die vorgesehene Tabelle zur aktuellen Datentabelle zu machen, wenn colListX erstellt wird.
hmmm meine JSl ist verpackt. Skript angehängt
open("$Sample_data/Basketball.jmp");<BR />open("$Sample_data/Baseball.jmp");<BR /><BR />Clear Log();<BR /> //dt_current=Data Table("Basketball");<BR /> /*Two tables opened: Baseball and Basketball. The table named "Basketball" is selected as current table*/<BR /> dt_working=Data Table("Baseball");<BR /> <BR /> Show("This is the dt_working table:");<BR /> Show(dt_working<<GET name=""></GET> colNamesList = dt_working << Get Column Names;<BR /> show("Columns names:");<BR /> show(colNamesList);<BR /> show(current data table()); //Baseball<BR /> <BR /> colListX = Col List Box (all, width(250), maxSelected(1));<BR /> show(colListX<<GET items=""></GET><BR /> //_______________________________________________________<BR /> <BR /> Write("\!N" ||Repeat("_",60)||"\!N");<BR /> <BR /> //make Basektball current <BR /> <BR /> current data table(Data Table("Basketball"));<BR /> <BR /> colListX = Col List Box (dt_working, all, width(250), maxSelected(1));<BR /> show(colListX<<GET items=""></GET><BR /> colListX = Col List Box (NameExpr(dt_working), all, width(250), maxSelected(1));<BR /> show(colListX<<GET items=""></GET><BR /> colListX = Col List Box (Data Table("Baseball"), all, width(250), maxSelected(1));<BR /> show(colListX<<GET items=""></GET> <BR /> <BR /> colListX = Col List Box (Data Table(dt_working<<GET name=""></GET> show(colListX<<GET items=""></GET><BR /><BR /> Eval( <BR /> Parse( EvalInsert("colListX = ColListBox( ^dt_working^, all, width(250), maxSelected(1));") )<BR /> );<BR /> wait(0);<BR /> show(colListX<<GET items=""></GET>