Generieren Sie Datentabellen Griffe Variable mit einer SchleifeHallo zusammen,
Ich habe die Schleife geschrieben, um SQL () -Datentabelle mit mehreren Tabellennamen auszuführen. Für die Verwaltung der Datentabelle versuche ich, einen Griff für jede Tabelle zu erstellen, aber es ist fehlgeschlagen.
Brauche alle Hilfe zum Code wie unten
sql_code 1 = Expr( "..." );
sql_code 2 = Expr( "..." );
sql_code 3 = Expr( "..." );
list = { "sql_code 1", "sql_code 2", sql_code 3" };
For( k = 1, k <= N Items( list ), k++,
sub_list = list[k];
Eval list( Parse( "var_" || sub_list ) ) = Execute SQL( database_connection, Eval(Parse(list)), invisible, "Data Table_" || sub_list );
);Haben Sie einen guten Tag
Betreff: Datentabellen erzeugen Griffe variabel mit einer Schleife @ Black_Wheel ,
Es gab mehrere Probleme mit Ihrem Skript.
- Die tatsächliche SQL sollte eine Zeichenfolge- / Zeichenvariable sein.
- Der letzte Artikel in aufführen Fehlt ein Zitat.
- Fehlende Konzepte in der Befehlszeile, die Sie in der For-Schleife generieren möchten
Die linke Seite einer JMP-Zuweisung muss ein sein L-Wert . Im Wesentlichen muss ein L-Wert ein Wort oder ein Name sein, kein Ausdruck.
Ich glaube jedoch, dass Sie versuchen, einen JMP-Befehl zu erstellen, bei dem die linke Seite der Zuweisung (die linke Seite von
ein Name ist.
Unten ist aus dem JMP-Protokoll-Fenster
Parse(Eval Insert( "\[var_^sub_list^ = Execute SQL( database_connection, ^list[k]^, invisible, "Data Table_^sub_list^")]\" )) ;
/*:
var_sql_code 1 = Execute SQL(
database_connection,
sql_code 1,
invisible,
"Data Table_sql_code 1"
)
Die oberste Zeile generiert einen gültigen JMP-Ausdruck. Wenn dies als Argument für die Eval () - Funktion verwendet wird und Ihre Datenbankverbindungszeichenfolge und Ihr SQL-Code keine Fehler aufweisen, sollte die Abfrage funktionieren. Siehe das Skript unten.
Zum besseren Verständnis der JSL-Funktionen im JMP-Hauptmenü> Hilfe > Skriptindex > Funktionen , Nachsehen:
- Eval Insert ()
- Parse ()
- Eval () und
- die Syntax für Execute SQL ()
sql_code 1 = "..." ;
sql_code 2 = "..." ;
sql_code 3 = "..." ;
list = { "sql_code 1", "sql_code 2", "sql_code 3" };
For( k = 1, k <= N Items( list ), k++,
sub_list = list[k];
Eval(Parse(Eval Insert( "\[var_^sub_list^ = Execute SQL( database_connection, ^list[k]^, invisible, "Data Table_^sub_list^")]\" )) ) ;
);
Ich hoffe, das hilft. Viel Glück!
Betreff: Datentabellen erzeugen Griffe variabel mit einer SchleifeAnstatt alle Vorgänge durchzugehen, um einen dynamischen Variablennamen für jede Ihrer SQL-Ergebnistabellen zu erstellen, erstellen Sie einfach eine Liste von Tabellen. Vor allem, wenn Ihre SQL-Anweisungen komplex sind.
sql_code 1 = Expr( "..." );
sql_code 2 = Expr( "..." );
sql_code 3 = Expr( "..." );
list = { "sql_code 1", "sql_code 2", "sql_code 3" };
dt_list = {};
For( k = 1, k <= N Items( list ), k++,
sql_statement = list[k];
dt_list[k] = Execute SQL( database_connection, sql_statement, invisible, "Data Table_" || char(k) );
);
Wenn die SQL-Anweisung Teil der neu erstellten Tabellen sein soll, können Sie sie als Tabellenvariable hinzufügen.
Betreff: Datentabellen erzeugen Griffe variabel mit einer Schleife @ Black_Wheel ,
Ich stimme voll und ganz mit Pete überein, @pmroz . Eine Liste von Ausdrücken, eine Liste von Spalten / Variablen, eine Liste von Datentabellennamen oder Referenzen, die nach Listenelementreihenfolge (k) abgeglichen sind, ist Code, der einfacher zu lesen und zu pflegen ist, und ich empfehle, ihn zu verwenden.
Betreff: Datentabellen erzeugen Griffe variabel mit einer SchleifeJa. @pmroz @ gzmorgan0 Auf jeden Fall ist eine Liste besser, als nur einen String in eine Variable zu zerlegen.
Wenn Sie nicht an allen drei Tischen dasselbe tun, würde ich sie nicht einmal in eine Liste aufnehmen. Ich würde die Variablen nur mit beschreibenden Namen benennen. Das zweite Beispiel besteht aus weniger Zeilen, ist einfacher zu verstehen und enthält benannte Variablen, sodass Sie sich nicht merken müssen, welche Tabelle 1, 2 und 3 ist.
Names default to here(1);
sqllist = {
"SELECT *
FROM People",
"SELECT *
FROM Places",
"SELECT *
FROM Things"
};
table_names = {"People", "Places", "Things"};
dt_list = {};
for(i=1, i<=nitems(sqllist), i++,
dt_list[k] = Execute SQL(dbc, sqllist[i], table_names[i])
);
// vs
dt_people = Execute SQL(dbc,
"SELECT *
FROM People",
"People"
);
dt_places = Execute SQL(dbc,
"SELECT *
FROM Places",
"Places"
);
dt_things = Execute SQL(dbc,
"SELECT *
FROM Things",
"Things"
);
Wenn die Tabellen jedoch alle dasselbe Schema haben, hätte ich nur eine Liste mit SQL-Anweisungen in einer Liste und würde diese direkt aufrufen.