関数呼び出しの何が問題になっていますか?JMP(Matlabから提供)で関数を記述して呼び出す方法を学んでいます。
SQLクエリを介してデータベースからテスト済みパーツのデータをプルしようとしています。
2つの別々のスクリプトを書きました。 1つは、入力変数としてPartIDを使用し、出力としてテストデータテーブルを使用する関数です。
他のスクリプトは関数呼び出しですが、partIDを関数に渡すことができないようです。 どこが間違っているのですか?
私の関数呼び出し
partDataTable = getDataTable4partID("PART16.0009")私の機能
getDataTable4PartID = Function( {PartID},{partDataTable},
Open Database(
"Driver=SQL Server;
Server=XAB-SQL02;
DATABASE=TBSDF;
Trusted_Connection=Yes;",
"SELECT * FROM dbo.View_BBX a WHERE a.Part like 'PartID' AND a.TestDateTime > '2021-02-01'",
"partDataTable" // name of the output data table
);
);SQLクエリ自体は、PartIDが実際のパーツ番号PART16.0009に置き換えられ、目的のデータテーブルを個別に吐き出すときに機能しますが、関数呼び出しを使用すると、データテーブルのソース/ DBからの更新スクリプトに「PartID」が残ります。空のデータテーブルにあります。
データ表スクリプティングウィンドウズRe:関数呼び出しの何が問題になっていますか?スクリプトインデックスおよびから関数を確認しますプログラミング関数-関数。 また、チェックしてくださいスクリプトガイド
現在、使用しないgetDataTable4PartIDの引数としてPartIDのみ、ローカル変数としてpartDataTableがあります。 ほとんどの場合、次のような関数を引数として定義する必要があります。
getDataTable4PartID = Function( {PartID, partDataTable},
それを整理した後、関数内の式で引数を使用する方法を理解する必要があります。 PartIDの場合、OpenDatabaseで直接使用するSQLクエリとpartDataTableに連結します。
Open Database(
"Driver=SQL Server;
Server=XAB-SQL02;
DATABASE=TBSDF;
Trusted_Connection=Yes;",
"SELECT * FROM dbo.View_BBX a WHERE a.Part like '"||PartID||"' AND a.TestDateTime > '2021-02-01'",
partDataTable // no need for quotes here
);
Re:関数呼び出しの何が問題になっていますか?ありがとう。 これは機能します。 ただし、引用符付きのpartDataTableを使用しても問題なく機能することに注意しました。 こんなはずなの?
Re:関数呼び出しの何が問題になっていますか?引用符で囲んでいる場合は、データテーブルに必要な名前ではなくpartDataTableという名前を付ける可能性があります(引数として使用したい場合)。
Re:関数呼び出しの何が問題になっていますか?@jthi 。 うーん、でも出力データテーブルに呼び出させたい名前を取得しています(つまり、partIDと同じです)。これは私の関数呼び出しです。
partDataTable = getDataTable4partID("PART16.0009","PART16.0009")
Re:関数呼び出しの何が問題になっていますか?私はちょうど何かに気づき、これが実際に当てはまるかどうかを確認する必要があります。 関数に変更を加えた後、変更を適用するには、関数を1回実行する必要があるようです。 保存するだけでは十分ではないようです。 これは正しいです?
私は引用符をに適用しましたpartDataTableと関数を保存しました。 関数呼び出しは、希望するデータテーブル名で期待どおりに機能しました。 しかし、関数を1回実行した後、関数呼び出しを再度実行すると、生成されたデータテーブルファイルの名前としてpartDataTableという、あなたが取得すると言ったものが表示されます。
Re:関数呼び出しの何が問題になっていますか?はい(質問を理解している場合)、関数 "function(...)"を実行して、割り当てられている変数(例ではgetDataTable4PartID)のコンパイル済み関数を置き換える必要があります。
それが見た目ほど不明確だった場合は、もう一度質問してください...
独自の関数を書く面白いかもしれません。
Re:関数呼び出しの何が問題になっていますか?はい、関数を「更新」するには、関数を1回実行する必要があります。
データテーブルにPartIDと同じ名前を付けたい場合は、関数で1つの引数を使用できます。 引用符付きと引用符なしのバージョンのもう少し完全な例を次に示します。
Names Default To Here(1);
getDataTable4PartID_withQuotes = Function({PartID},
Open Database("connectionstring",
"
select '" || PartID || "' as value
from dual
",
"PartID"
);
);
partDataTable_withQuotes = getDataTable4PartID_withQuotes("PART16.0009");
Show(partDataTable_withQuotes);
getDataTable4PartID = Function({PartID},
Open Database("connectionstring",
"
select '" || PartID || "' as value
from dual
",
PartID
);
);
partDataTable = getDataTable4PartID("PART16.0009");
Show(partDataTable);私の場合、これらはログに出力されます。
partDataTable_withQuotes = DataTable("PartID");
partDataTable = DataTable("PART16.0009");
JMPは関数からデータテーブルを返します(これは「最後の」行であるため)が、それを信頼することに不安があるため、関数でローカル参照を使用してから参照を返すと、最終的な関数は次のようになります。
getDataTable4PartID = Function({PartID}, {dtTemp},
dtTemp = Open Database("connectionstring",
"select '" || PartID || "' as value
from dual",
PartID
);
return(dtTemp);
);