ループを使用してデータテーブルのグリップ変数を生成するこんにちは、みんな、
複数のテーブル名でSQL()データテーブルを実行するループを作成しました。データテーブルを管理するために、各テーブルのグリップを作成しようとしていますが、失敗しました。
次のように誰もがコードの助けを必要とします
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 );
);良い一日を過ごしてください
再:ループを使用してデータテーブルのグリップ変数を生成するしゅう 、
スクリプトにいくつかの問題がありました。
- 実際のSQLは文字列/文字変数である必要があります。
- の最後のアイテムリスト引用符がありません。
- Forループ内で生成しようとしているコマンドラインの概念がありません
JMP割り当ての左側は、 L値 。本質的に、L-Valueは式ではなく単語または名前でなければなりません。
ただし、割り当ての左側(=の左側)が名前であるJMPコマンドを作成しようとしていると思います。
以下はJMPログウィンドウからのものです
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"
)
一番上の行は、有効なJMP式を生成します。それがEval()関数の引数として使用され、データベース接続文字列とSQLコードにエラーがない場合、クエリは機能するはずです。 以下のスクリプトを参照してください。
JSL機能を理解しやすくするために、JMPメインメニュー> 助けて > スクリプトインデックス > 関数 、調べる:
- 評価挿入()
- 解析()
- Eval()、および
- 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^")]\" )) ) ;
);
お役に立てば幸いです。幸運を!
再:ループを使用してデータテーブルのグリップ変数を生成するSQL結果テーブルごとに動的な変数名を作成するためにすべてのマシネーションを通過するのではなく、テーブルのリストを作成してみませんか?特にSQLステートメントが複雑な場合。
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) );
);
SQLステートメントを新しく作成されたテーブルの一部にしたい場合は、テーブル変数として追加できます。
再:ループを使用してデータテーブルのグリップ変数を生成するしゅう 、
私はピートに完全に同意します、 @pmroz 。式のリスト、リストの列/変数、データテーブルの名前または参照のリストは、リストアイテムの順序(k)に一致し、読みやすく保守しやすいコードです。使用することをお勧めします。
再:ループを使用してデータテーブルのグリップ変数を生成するうん。 @pmroz しゅう間違いなく、リストは文字列を変数に解析するよりも優れています。
ただし、3つのテーブルすべてに同じことをしているのでなければ、それらをリストに入れることさえしません。 変数にわかりやすい名前を付けます。 2番目の例は行が少なく、理解しやすく、名前付き変数を提供するため、どのテーブルが1、2、3であるかを覚えておく必要はありません。
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"
);
ただし、すべてのテーブルが同じスキーマを持っている場合、リストにsqlステートメントのリストがあり、それを直接呼び出します。