我的函数调用有什么问题?我正在学习如何在 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作为生成的数据表文件的名称。
回复:我的函数调用有什么问题?是的(如果我理解这个问题),必须执行函数“function(...)”来替换它分配给的变量中的编译函数,在您的示例中为 getDataTable4PartID 。
如果这和看起来一样不清楚,请再问一次......
编写自己的函数可能也很有趣。
回复:我的函数调用有什么问题?是的,您必须运行该函数一次才能使其“更新”。
如果您希望数据表的名称与 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);
);