腳本 - 使用 OBBC 查詢中的數據表大家好 -
我正在處理存儲在 Microsoft Access 數據庫中的兩個數據集,這些數據集是通過 ODCB 查詢獲得的。 在進行更多數據操作之前,我需要連接兩個結果數據表。
我已經編寫了整個過程的腳本,但是它並沒有立即完全運行。 我總是必須首先運行兩個 ODCB 查詢的腳本,然後運行表連接和其他操作的腳本。
否則我會收到一條錯誤消息:“無法在“數據表”的訪問或評估中找到數據表,數據表/*###*/(“qStreams”) ”
(“qStreams”是我從 ODCB 查詢中獲得的兩個表之一)。
我覺得我可能需要添加一些腳本來存儲/聲明從 ODCB 查詢中獲取的數據表,以便稍後使用它,這就是我陷入困境的地方,因為我對 JSL 腳本非常不熟悉(這是我的第一個腳本)實際上是腳本)。
感謝您的幫助。
數據存取回复:腳本 - 使用 OBBC 查詢中的數據表JMP 支持人員確實做出了回應,但它在我的垃圾箱裡。
他們的建議就像你提到的那樣,而且效果很好。
為了大家的利益粘貼他們的詳細反饋:
=================================================== ===============================================
將 <

使用<<運行前台與運行完成時用於分配對導入表的引用的選項。 這將導致您的腳本等待查詢完成。 此外,查詢生成器創建一個僅可用於名為“queryResult”的 OnRunComplete() 腳本的符號。 該符號是對結果表的引用。
<< 運行前台( 運行完成時( 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 ) ));
回复:腳本 - 使用 OBBC 查詢中的數據表@jthi好主意!
如果這是問題所在,這篇文章可能會有所幫助:在後台運行查詢,等待它們完成,並在剩餘的 JSL 腳本中引用它們
回复:腳本 - 使用 OBBC 查詢中的數據表您是在前台還是在後台運行查詢(我認為這取決於偏好,但您可以強制它)? 如果它們在後台運行,則可能意味著在您嘗試將數據表連接在一起之前查詢不會完成。
回复:腳本 - 使用 OBBC 查詢中的數據表感謝您花時間研究它。 不幸的是這沒有用。
我已聯繫 JMP 支持人員,但到目前為止才收到他們的回复。 不確定他們是否解決了此類技術問題。
回复:腳本 - 使用 OBBC 查詢中的數據表所以在這裡我不得不承認我並不經常使用New SQL Query。你的代碼看起來正確的。這裡有兩個想法,一個是你可能需要用括號括起來(New SQL Query( ... ) << Run),另一個方法是包含一個等待語句以確保查詢在繼續之前實際評估。嘗試一次運行一行代碼,並查看 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( ... );
回复:腳本 - 使用 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%" )
);
但它仍然給出一個錯誤:

回复:腳本 - 使用 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( ... );
回复:腳本 - 使用 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;
我意識到我應該立即分享我的腳本。
感謝您的進一步指導。
回复:腳本 - 使用 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 ),
...
);