我的函數調用有什麼問題?我正在學習如何在 JMP(來自 Matlab)中編寫和調用函數。
嘗試通過 SQL 查詢從數據庫中提取測試零件的數據。
寫了兩個單獨的腳本。 一種是以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
);
);當 PartID 被實際零件號 PART16.0009 替換並單獨運行時,SQL 查詢本身起作用並吐出所需的數據表,但是當我使用函數調用時,數據表在 Source/Update From DB 腳本中仍然有“PartID”在空數據表中。
數據表腳本編寫視窗回复:我的函數調用有什麼問題?從腳本索引和從檢查功能編程函數 - 函數. 還要檢查腳本指南
目前您只有 PartID 作為參數,partDataTable 作為您不使用的 getDataTable4PartID 的局部變量。 很可能你想用這樣的東西定義函數來必須參數:
getDataTable4PartID = Function( {PartID, partDataTable},
弄清楚之後,您必須弄清楚如何在函數內部的表達式中使用參數。 對於 PartID,您想將其連接到您想直接在開放數據庫中使用的 SQL-query 和 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
);
回复:我的函數調用有什麼問題?謝謝。 這有效。 但是,我注意到帶有引號的 partDataTable 也可以正常工作。 應該是這樣的?
回复:我的函數調用有什麼問題?如果您將它放在引號中,它很可能會將您的數據表命名為 partDataTable 而不是您想要的名稱(如果您想將其作為參數)。
回复:我的函數調用有什麼問題?@jthi . 嗯,但我得到了我想要調用輸出數據表的名稱(即與我的 partID 相同)。這是我的函數調用。
partDataTable = getDataTable4partID("PART16.0009","PART16.0009")
回复:我的函數調用有什麼問題?我剛剛意識到一些事情,需要確認是否確實如此。 對函數進行更改後,似乎我需要運行一次函數才能應用更改。 僅僅節省似乎還不夠。 這樣對嗎?
我已將引號應用於partDataTable 並保存了我的函數。 函數調用與我想要的數據表名稱一起按預期工作。 但是在運行一次函數之後,當我再次運行函數調用時,我得到了你所說的我會得到,即partDataTable作為生成的數據表文件的名稱。
回复:我的函數調用有什麼問題?是的,您必須運行該函數一次才能使其“更新”。
如果您希望數據表的名稱與 PartID 相同,那麼您只需在函數中使用一個參數即可。 這是一個更完整的例子,帶引號和不帶引號的版本:
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);
);