내 함수 호출에 어떤 문제가 있나요?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'가 있습니다. 빈 데이터 테이블에.
데이터 접근윈도우Re: 함수 호출에 어떤 문제가 있나요?첨가
include ("getDataTable4partID.jsl");함수 호출이 내가 겪었던 모든 문제를 해결한 것 같습니다.
Re: 함수 호출에 어떤 문제가 있나요?감사해요 @jthi . 내 모든 스크립트와 함수의 첫 번째 줄은 다음과 같습니다.
Names Default To Here(1);
(이전 게시물에서 언급했듯이) 위의 줄에 주석을 달지 않고는 이 특정 기능이 실행되지 않았습니다.
어쨌든 추천해 주신 기능을 사용하면 예상/정확한 데이터가 포함된 데이터 테이블을 가져오는데 데이터 테이블의 이름은 UntitledXX입니다(제 경우에는 XX가 24입니다). 이 문제를 해결하는 데 도움이 될 것입니다. 감사해요.
Re: 함수 호출에 어떤 문제가 있나요?이름의 기본값이 여기에 있는 경우(1); 스크립트가 중단되면 네임스페이스에 문제가 있을 가능성이 높습니다. 거의 항상 Names Default To Here(1)을 사용하여 JSL 스크립트를 시작해야 하며 아무 문제도 발생하지 않아야 합니다.
내 생각에는 잘못된 위치에 정의되었거나 잘못된 위치에서 호출된 것 같습니다. 실행 순서는 JSL에서 중요합니다.
Re: 함수 호출에 어떤 문제가 있나요?감사해요 @jthi .귀하가 제안한 내용에는 두 가지 문제가 있습니다.
내가 함수를 호출하면
//Names Default To Here(1);
getDataTable4PartID = Function({PartID}, {dtTemp},
dtTemp = Open Database("connectionstring",
"select '" || PartID || "' as value
from dual",
PartID
);
return(dtTemp);
);~처럼
</CODE></PRE><P>예상/올바른 데이터가 포함된 데이터 테이블을 얻었지만 데이터 테이블의 이름은 UntitledXX입니다(제 경우 XX는 24입니다).</P><P>또한 내가 댓글을 달았어야 했다는 점에 유의하세요.</P><PRE class="language-jsl"><CODE>Names Default To Here(1);DataTable4PartID = getDataTable4PartID("PART16.0009");
없이는 함수 호출이 작동하지 않았습니다. 무슨 일이 일어나고 있는지 잘 모르겠습니다.... 어떤 도움이라도 매우 유용할 것입니다.
Re: 함수 호출에 어떤 문제가 있나요?예, "업데이트"하려면 해당 기능을 한 번 실행해야 합니다.
데이터 테이블의 이름을 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);
);
Re: 함수 호출에 어떤 문제가 있나요?예(질문을 이해한다면) "function(...)" 함수를 실행하여 할당된 변수(예제에서는 getDataTable4PartID)의 컴파일된 함수를 대체해야 합니다.
보기만큼 불분명하다면 다시 질문해 주세요.
자신만의 함수 작성 흥미로울 수도 있습니다.
Re: 함수 호출에 어떤 문제가 있나요?방금 깨달은 것이 있는데 이것이 사실인지 확인해야 합니다. 함수를 변경한 후 해당 함수를 한 번 실행해야 변경 사항이 적용되는 것으로 보입니다. 저축만으로는 충분하지 않은 것 같습니다. 이 올바른지?
나는 따옴표를 적용했다 partDataTable을 사용하고 내 기능을 저장했습니다. 함수 호출은 내가 원하는 데이터 테이블 이름으로 예상대로 작동했습니다. 그러나 함수를 한 번 실행한 후 다시 함수 호출을 실행하면 생성된 데이터 테이블 파일의 이름인 partDataTable과 같은 결과를 얻게 됩니다.
Re: 함수 호출에 어떤 문제가 있나요?@jthi . 흠, 하지만 출력 데이터 테이블을 호출할 이름이 표시됩니다(예: 내 partID와 동일).이것은 내 함수 호출입니다.
partDataTable = getDataTable4partID("PART16.0009","PART16.0009")
Re: 함수 호출에 어떤 문제가 있나요?따옴표로 묶은 경우 데이터 테이블의 이름을 partDataTable로 지정하고 원하는 이름으로 지정할 가능성이 높습니다(인수로 사용하려는 경우).
Re: 함수 호출에 어떤 문제가 있나요?감사해요. 이것은 작동합니다. 그러나 따옴표가 있는 partDataTable을 사용하는 것도 잘 작동한다는 점에 주목했습니다. 이렇다고 해야 할까요?
Re: 함수 호출에 어떤 문제가 있나요?스크립팅 인덱스 및 기능 확인 프로그래밍 기능 - 기능 . 또한 확인 스크립팅 가이드
현재 사용하지 않는 getDataTable4PartID에 대한 로컬 변수로 PartID가 유일한 인수이고 partDataTable이 있습니다. 아마도 당신은 인수가 필요하도록 다음과 같이 정의된 함수를 원할 것입니다.
getDataTable4PartID = Function( {PartID, partDataTable},
이를 정리한 후에는 함수 내부 표현식에서 인수를 사용하는 방법을 알아내야 합니다. PartID의 경우 Open Database에서 직접 사용하려는 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
);