Script - Travailler avec la table de données à partir de la requête OBBCSalut tout le monde -
Je travaille avec deux ensembles de données stockés dans la base de données Microsoft Access, que je reçois via des requêtes ODCB. Je dois joindre les deux tables de données résultantes avant de faire d'autres manipulations de données.
J'ai scripté l'ensemble du processus, mais il ne s'exécute pas complètement à la fois. Je dois toujours d'abord exécuter le script pour les deux requêtes ODCB, puis exécuter mon script pour la jointure de tables et d'autres manipulations.
Sinon j'obtiens un message d'erreur : " impossible de localiser la table de données dans l'accès ou l'évaluation de 'data table' , Data Table/*###*/("qStreams") "
("qStreams" étant des deux tables que j'ai obtenues de la requête ODCB).
Je pense que je devrais peut-être ajouter un script pour stocker/déclarer les tables de données que j'obtiens des requêtes ODCB afin de les utiliser plus tard, et c'est là que je suis bloqué, car je ne connais pas du tout le script JSL (c'est mon premier scénario en fait).
Merci pour votre aide.
Accès aux donnéesRe : Script - Travailler avec la table de données à partir de la requête OBBCLes gars du support JMP ont répondu, mais c'était dans ma boîte de courrier indésirable.
Ils ont suggéré comme vous l'avez mentionné, et cela a très bien fonctionné.
Coller leurs commentaires détaillés pour le bénéfice de tous :
================================================= ==============================================
L'envoi du message <

Utiliser < avec le OnRunComplet possibilité d'attribuer une référence à la table importée. Cela obligera votre script à attendre que la requête se termine. En outre, Le générateur de requêtes crée un symbole qui n'est disponible que pour le script OnRunComplete() appelé « queryResult ». Ce symbole est une référence au tableau résultant .
<< Exécuter le premier plan (lors de l'exécution complète (dt = queryResult));
Vous pouvez en savoir plus sur les fonctions disponibles et leurs arguments sur le Fonctions SQL section de la référence de syntaxe JSL.
================================================= ==============================================
Donc en application :
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 - Travailler avec la table de données à partir de la requête OBBC@jthi bonne pensée !
Si tel est le problème, ce message pourrait vous aider : Exécutez des requêtes en arrière-plan, attendez qu'elles se terminent et référencez-les dans le script JSL restant
Re : Script - Travailler avec la table de données à partir de la requête OBBCExécutez-vous la requête au premier plan ou en arrière-plan (je pense que cela dépend des préférences, mais vous pouvez le forcer) ? S'ils sont exécutés en arrière-plan, cela peut signifier que les requêtes ne se terminent pas avant que vous n'essayiez de joindre des tables de données.
Re : Script - Travailler avec la table de données à partir de la requête OBBCMerci d'avoir pris le temps de l'examiner. Malheureusement, cela n'a pas fonctionné.
J'ai contacté l'assistance JMP, mais j'ai eu de leurs nouvelles jusqu'à présent. Je ne sais pas s'ils répondent à ce genre de requête technique.
Re : Script - Travailler avec la table de données à partir de la requête OBBCDonc ici, je dois admettre que je n'utilise pas très souvent New SQL Query.Votre code regards correct.Deux idées ici, une que vous pourrait besoin de mettre des parenthèses autour (New SQL Query( ... ) << Run), et une autre consiste à inclure une instruction d'attente pour s'assurer que les requêtes sont réellement évaluées avant d'aller de l'avant.Essayez d'exécuter votre code une ligne à la fois et voyez si les fonctions n row renvoient le nombre attendu.
//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 - Travailler avec la table de données à partir de la requête OBBCSalut -
Ayant toujours un problème pour joindre les deux tables, voici le script que j'ai implémenté suite à votre message :
// 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%" )
);
Mais ça donne quand même une erreur :

Re : Script - Travailler avec la table de données à partir de la requête OBBCVous définiriez une variable égale à la valeur de Nouvelle requête SQL.En utilisant les fonctions de plus haut niveau de votre script, cela pourrait ressembler à ceci :
//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 - Travailler avec la table de données à partir de la requête OBBCMerci beaucoup pour la réponse rapide.
Je comprends le concept mais je ne suis pas en mesure de l'appliquer à mon cas spécifique. Mon script de requête ressemble à ceci en ce moment :
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;
Je me rends compte que j'aurais dû partager mon script tout de suite.
Appréciez vos conseils supplémentaires.
Re : Script - Travailler avec la table de données à partir de la requête OBBCSalut @JRS ,
Essayez de conserver une référence aux tables de données que vous ouvrez avec chaque connexion ODBC et utilisez-les au lieu d'appeler par leur nom, comme ceci :
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 ),
...
);