Script: trabaje con la tabla de datos de la consulta OBBCHola a todos -
Estoy trabajando con dos conjuntos de datos almacenados en la base de datos de Microsoft Access, que obtengo a través de consultas ODCB. Necesito unir las dos tablas de datos resultantes, antes de realizar más manipulaciones de datos.
He escrito todo el proceso, sin embargo, no se ejecuta completamente a la vez. Siempre tengo que ejecutar primero el script para las dos consultas ODCB, luego ejecutar mi script para unir tablas y otras manipulaciones.
De lo contrario, aparece un mensaje de error: " no se puede ubicar la tabla de datos en el acceso o evaluación de 'tabla de datos', Tabla de datos/*###*/("qStreams") "
("qStreams" siendo de las dos tablas que obtuve de la consulta ODCB).
Siento que es posible que deba agregar algún script para almacenar/declarar las tablas de datos que obtengo de las consultas ODCB para usarlas más adelante, y aquí es donde estoy atascado, porque no estoy muy familiarizado con el script JSL (este es mi primer guión en realidad).
Gracias por tu ayuda.
Acceso a los datosRe: Script - Trabajar con la tabla de datos de la consulta OBBCLos chicos de soporte de JMP respondieron pero estaba en mi caja de chatarra.
Ellos sugirieron tal como usted mencionó, y funcionó muy bien.
Pegando sus comentarios detallados para el beneficio de todos:
================================================== ==============================================
Enviar el mensaje <

Usar < con el OnRunComplete opción para asignar una referencia a la tabla importada. Esto hará que su secuencia de comandos espere a que se complete la consulta. Además, Query Builder crea un símbolo que solo está disponible para el script OnRunComplete() llamado 'queryResult'. Este símbolo es una referencia a la tabla resultante. .
<< Ejecutar en primer plano (en la ejecución completa (dt = queryResult));
Puede leer más sobre las funciones disponibles y sus argumentos en el Funciones SQL sección de la referencia de sintaxis JSL.
================================================== ==============================================
Entonces en la aplicación:
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: Script - Trabajar con la tabla de datos de la consulta OBBC@jthi ¡Buen pensamiento!
Si este es el problema, esta publicación podría ayudar: Ejecute consultas en segundo plano, espere a que se completen y haga referencia a ellas en el script JSL restante
Re: Script - Trabajar con la tabla de datos de la consulta OBBC¿Está ejecutando la consulta en primer plano o en segundo plano (creo que esto depende de las preferencias, pero puede forzarlo)? Si se ejecutan en segundo plano, podría significar que las consultas no finalizan antes de intentar unir las tablas de datos.
Re: Script - Trabajar con la tabla de datos de la consulta OBBCGracias por tomarse el tiempo para investigarlo. Desafortunadamente eso no funcionó.
Me puse en contacto con el soporte de JMP, pero he tenido noticias suyas hasta ahora. No estoy seguro si abordan este tipo de consulta técnica.
Re: Script - Trabajar con la tabla de datos de la consulta OBBCAsí que aquí tengo que admitir que no uso New SQL Query muy a menudo.Tu codigo aspecto correcto.Dos ideas aquí, una que usted podría necesita poner paréntesis (Nueva consulta SQL (...) << Ejecutar), y otra es incluir una declaración de espera para asegurarse de que las consultas realmente se evalúen antes de seguir adelante.Intente ejecutar su código una línea a la vez y vea si las funciones de fila n devuelven el número que espera.
//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: Script - Trabajar con la tabla de datos de la consulta OBBCHola -
Todavía tengo algunos problemas para unir ambas tablas, aquí está el script que implementé después de su publicación:
// 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%" )
);
Pero todavía da un error:

Re: Script - Trabajar con la tabla de datos de la consulta OBBCEstablecería una variable igual al valor de Nueva consulta SQL.Usando las funciones de más alto nivel de su secuencia de comandos, podría verse así:
//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: Script - Trabajar con la tabla de datos de la consulta OBBCMuchas gracias por la rápida respuesta.
Entiendo el concepto pero no puedo aplicarlo para mi caso específico. Mi script de consulta se ve así en este momento:
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;
Me doy cuenta de que debería haber compartido mi guión de inmediato.
Agradezco su orientación adicional.
Re: Script - Trabajar con la tabla de datos de la consulta OBBCHola @JRS ,
Intente retener una referencia a las tablas de datos que abre con cada conexión ODBC y utilícelas en lugar de llamar por nombre, así:
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 ),
...
);