脚本 - 使用 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 ),
...
);