스크립트 - OBBC 쿼리에서 데이터 테이블 작업안녕하세요 여러분 -
저는 ODCB 쿼리를 통해 얻은 Microsoft Access 데이터베이스에 저장된 두 개의 데이터 세트로 작업하고 있습니다. 더 많은 데이터 조작을 하기 전에 두 개의 결과 데이터 테이블을 조인해야 합니다.
전체 프로세스를 스크립팅했지만 한 번에 완전히 실행되지는 않습니다. 저는 항상 먼저 두 개의 ODCB 쿼리에 대한 스크립트를 실행한 다음 테이블 조인 및 기타 조작에 대한 스크립트를 실행해야 합니다.
그렇지 않으면 다음과 같은 오류 메시지가 나타납니다. " 액세스 또는 'data table' 평가에서 데이터 테이블을 찾을 수 없습니다. Data Table/*###*/("qStreams") "
("qStreams"는 내가 ODCB 쿼리에서 얻은 두 테이블 중 하나임).
나중에 사용하기 위해 ODCB 쿼리에서 얻은 데이터 테이블을 저장/선언하기 위해 일부 스크립트를 추가해야 할 수도 있다고 생각합니다. JSL 스크립트에 매우 익숙하지 않기 때문에 여기에서 막혔습니다. 실제로 스크립트).
당신의 도움을 주셔서 감사합니다.
데이터 접근Re: 스크립트 - OBBC 쿼리에서 데이터 테이블 작업JMP 지원 담당자가 응답했지만 내 정크 박스에 있었습니다.
그들은 당신이 언급한 대로 제안했고 잘 작동했습니다.
모든 사람의 이익을 위해 자세한 피드백 붙여넣기:
==================================================== ==============================================
<

사용 <<전경 실행 와 더불어 OnRunComplete 가져온 테이블에 대한 참조를 할당하는 옵션. 이렇게 하면 스크립트가 쿼리가 완료될 때까지 대기하게 됩니다. 추가적으로, Query Builder는 'queryResult'라는 OnRunComplete() 스크립트에서만 사용할 수 있는 기호를 생성합니다. 이 기호는 결과 테이블에 대한 참조입니다. .
<< Run Foreground( On Run Complete( dt = queryResult ) );
사용 가능한 함수 및 해당 인수에 대한 자세한 내용은 SQL 함수 JSL 구문 참조 섹션.
==================================================== ==============================================
따라서 응용 프로그램에서:
dtqProperties = (New SQL Query(
Version( 130 ),
Connection(
"ODBC:DBQ=C:\Users\E822710\Desktop\ROTF\Database For JMP\Results.Mdb;DefaultDir=C:\Users\E822710\Desktop\ROTF\Database For JMP;Driver={Microsoft Access Driver (*.mdb, *.accdb)};DriverId=25;FIL=MS Access;FILEDSN=C:\Users\E822710\Desktop\ROTF\Database For JMP\Results.Mdb.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"
),
QueryName( "qProperties" ),
Select(
Column( "CaseID", "t1", Analysis Type( "Nominal" ) ),
Column( "StreamID", "t1", Analysis Type( "Nominal" ) ),
Column( "StreamTag", "t1" ),
Column( "StreamDescription", "t1" ),
Column( "QualityID", "t1", Analysis Type( "Nominal" ) ),
Column( "QualityTag", "t1" ),
Column( "QualityDescription", "t1" ),
Column( "Value", "t1", Alias( "StreamQualityValue" ) ),
Column( "OriginDescription", "t1", Alias( "StreamOriginDescription" ) )
),
From( Table( "RW_StreamQualities", Alias( "t1" ) ) ),
Where(
In List(
Column( "QualityTag", "t1" ),
{"CRB"},
UI( SelectListFilter( ListBox, Base( "Categorical" ) ) )
)
),
Order By(
Column( "CaseID", "t1", Order( "Ascending" ) ),
Column( "StreamReportOrder", "t1", Order( "Ascending" ) ),
Column( "QualityReportOrder", "t1", Order( "Ascending" ) )
)
) << Run Foreground( On Run Complete( dt = queryResult ) ));
Re: 스크립트 - OBBC 쿼리에서 데이터 테이블 작업@jthi 좋은 생각!
이것이 문제인 경우 이 게시물이 도움이 될 수 있습니다. 백그라운드에서 쿼리를 실행하고 쿼리가 완료될 때까지 기다린 다음 나머지 JSL 스크립트에서 쿼리를 참조합니다.
Re: 스크립트 - OBBC 쿼리에서 데이터 테이블 작업전경 또는 배경에서 쿼리를 실행하고 있습니까(기본 설정에 따라 다르지만 강제로 실행할 수 있음)? 백그라운드에서 실행되는 경우 데이터 테이블을 결합하기 전에 쿼리가 완료되지 않을 수 있습니다.
Re: 스크립트 - OBBC 쿼리에서 데이터 테이블 작업조사해 주셔서 감사합니다. 불행히도 그것은 작동하지 않았습니다.
JMP 지원팀에 연락했지만 지금까지 회신을 받았습니다. 그들이 이런 종류의 기술적 질문을 다루는지 확실하지 않습니다.
Re: 스크립트 - OBBC 쿼리에서 데이터 테이블 작업그래서 여기서 저는 New SQL Query를 자주 사용하지 않는다는 것을 인정해야 합니다.귀하의 코드 외모 옳은.여기에 두 가지 아이디어가 있습니다. ~할 것 같다 (New SQL Query( ... ) << Run) 주위에 괄호를 넣어야 하고 또 다른 하나는 앞으로 이동하기 전에 쿼리가 실제로 평가되는지 확인하기 위해 wait 문을 포함하는 것입니다.한 번에 한 줄씩 코드를 실행하고 n 행 함수가 예상한 숫자를 반환하는지 확인합니다.
//Get data
dtqStreams = (New SQL Query( ... ) << Run);
dtqProperties = (New SQL Query( ... ) << Run);
//Make sure everything evaluates
wait(1);
//check that table contains values
n row( dtqStreams );
// Join both Data Tables
dtJoined = dtqStreams << Join( With( dtqProperties ), ... );
// Set column properties
dtJoined:"StreamFeedFlag"n << Add Column Properties( ... );
// Add new columns
dtJoined << New Column( ... );
// Make graphs from your joined data table
dtJoined << Graph Builder( ... );
Re: 스크립트 - OBBC 쿼리에서 데이터 테이블 작업안녕 -
여전히 두 테이블을 조인하는 데 몇 가지 문제가 있습니다. 게시물 다음에 구현한 스크립트는 다음과 같습니다.
// Join both Data Tables
dtJoined = dtqStreams << Join(
With( dtqProperties ),
Merge Same Name Columns,
Match Flag( 0 ),
By Matching Columns( :CaseID = :CaseID, :StreamID = :StreamID ),
Drop multiples( 0, 0 ),
Include Nonmatches( 0, 0 ),
Preserve main table order( 1 ),
Output Table( "UnitBalance.HY%" )
);
그러나 여전히 오류가 발생합니다.

Re: 스크립트 - OBBC 쿼리에서 데이터 테이블 작업새 SQL 쿼리 값과 동일한 변수를 설정합니다.스크립트의 최고 수준 기능을 사용하면 다음과 같이 표시될 수 있습니다.
//Get data
dtqStreams = New SQL Query( ... ) << Run;
dtqProperties = New SQL Query( ... ) << Run;
// Join both Data Tables
dtJoined = dtqStreams << Join( With( dtqProperties ), ... );
// Set column properties
dtJoined:"StreamFeedFlag"n << Add Column Properties( ... );
// Add new columns
dtJoined << New Column( ... );
// Make graphs from your joined data table
dtJoined << Graph Builder( ... );
Re: 스크립트 - OBBC 쿼리에서 데이터 테이블 작업빠른 답변에 감사드립니다.
개념은 알지만 특정 사례에 적용할 수는 없습니다. 내 쿼리 스크립트는 현재 다음과 같습니다.
New SQL Query(
Version( 130 ),
Connection(
"ODBC:DBQ=C:\Users\E822710\Desktop\ROTF\Database For JMP\Results.Mdb;DefaultDir=C:\Users\E822710\Desktop\ROTF\Database For JMP;Driver={Microsoft Access Driver (*.mdb, *.accdb)};DriverId=25;FIL=MS Access;FILEDSN=C:\Users\E822710\Desktop\ROTF\Database For JMP\Results.Mdb.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;"
),
QueryName( "qProperties" ),
Select(
Column( "CaseID", "t1", Analysis Type( "Nominal" ) ),
Column( "StreamID", "t1", Analysis Type( "Nominal" ) ),
Column( "StreamTag", "t1" ),
Column( "StreamDescription", "t1" ),
Column( "QualityID", "t1", Analysis Type( "Nominal" ) ),
Column( "QualityTag", "t1" ),
Column( "QualityDescription", "t1" ),
Column( "Value", "t1", Alias( "StreamQualityValue" ) ),
Column( "OriginDescription", "t1", Alias( "StreamOriginDescription" ) )
),
From( Table( "RW_StreamQualities", Alias( "t1" ) ) ),
Where(
In List(
Column( "QualityTag", "t1" ),
{"CRB"},
UI( SelectListFilter( ListBox, Base( "Categorical" ) ) )
)
),
Order By(
Column( "CaseID", "t1", Order( "Ascending" ) ),
Column( "StreamReportOrder", "t1", Order( "Ascending" ) ),
Column( "QualityReportOrder", "t1", Order( "Ascending" ) )
)
) << Run;
스크립트를 바로 공유했어야 했다는 걸 깨달았습니다.
귀하의 추가 안내에 감사드립니다.
Re: 스크립트 - OBBC 쿼리에서 데이터 테이블 작업안녕 @JRS ,
각 ODBC 연결로 연 데이터 테이블에 대한 참조를 유지하고 다음과 같이 이름으로 호출하는 대신 참조를 사용해 보십시오.
dt1 = Open Database( "DSN=My Data Source Name", "SELECT * FROM table1" );
dt2 = Open Database( "DSN=My Data Source Name", "SELECT * FROM table2" );
dt1 << Join(
With( dt2 ),
...
);