Skript – Arbeiten mit Datentabelle aus OBBC-AbfrageHallo allerseits -
Ich arbeite mit zwei in der Microsoft Access-Datenbank gespeicherten Datensätzen, die ich über ODCB-Abfragen erhalte. Ich muss die beiden resultierenden Datentabellen zusammenführen, bevor ich weitere Datenmanipulationen vornehme.
Ich habe den gesamten Prozess per Skript erstellt, er wird jedoch nicht vollständig auf einmal ausgeführt. Ich muss immer zuerst das Skript für die beiden ODCB-Abfragen ausführen und dann mein Skript für die Tabellenverknüpfung und andere Manipulationen ausführen.
Ansonsten erhalte ich eine Fehlermeldung: „ Datentabelle kann beim Zugriff oder bei der Auswertung von „Datentabelle“ nicht gefunden werden, Data Table/*###*/("qStreams") "
(„qStreams“ ist eine der beiden Tabellen, die ich aus der ODCB-Abfrage erhalten habe).
Ich habe das Gefühl, dass ich möglicherweise ein Skript hinzufügen muss, um die Datentabellen, die ich aus den ODCB-Abfragen erhalte, zu speichern/deklarieren, um sie später verwenden zu können, und hier stecke ich fest, weil ich mit JSL-Skripten sehr unbekannt bin (dies ist mein erstes). Skript eigentlich).
Vielen Dank für Ihre Hilfe.
DatenzugriffBetreff: Skript – Arbeiten mit Datentabelle aus OBBC-AbfrageDie Leute vom JMP-Support haben zwar geantwortet, aber es war in meinem Junk-Ordner.
Sie haben genau das vorgeschlagen, was Sie erwähnt haben, und es hat einwandfrei funktioniert.
Fügen Sie ihr detailliertes Feedback zum Nutzen aller ein:
=============================================== ============================================
Durch das Senden der <

Verwenden < mit dem OnRunComplete Option zum Zuweisen einer Referenz auf die importierte Tabelle. Dadurch wartet Ihr Skript auf den Abschluss der Abfrage. Zusätzlich, Query Builder erstellt ein Symbol namens „queryResult“, das nur für das OnRunComplete()-Skript verfügbar ist. Dieses Symbol ist ein Verweis auf die resultierende Tabelle .
<< Run Foreground( On Run Complete( dt = queryResult ) );
Weitere Informationen zu den verfügbaren Funktionen und ihren Argumenten finden Sie im SQL-Funktionen Abschnitt der JSL-Syntaxreferenz.
=============================================== ============================================
Also in der Anwendung:
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 ) ));
Betreff: Skript – Arbeiten mit Datentabelle aus OBBC-Abfrage@jthi guter Gedanke!
Wenn dies das Problem ist, könnte dieser Beitrag helfen: Führen Sie Abfragen im Hintergrund aus, warten Sie, bis sie abgeschlossen sind, und verweisen Sie im verbleibenden JSL-Skript darauf
Betreff: Skript – Arbeiten mit Datentabelle aus OBBC-AbfrageFühren Sie die Abfrage im Vordergrund oder im Hintergrund aus (ich denke, das ist präferenzabhängig, aber Sie können es erzwingen)? Wenn sie im Hintergrund ausgeführt werden, kann es sein, dass die Abfragen nicht abgeschlossen werden, bevor Sie versuchen, Datentabellen miteinander zu verbinden.
Betreff: Skript – Arbeiten mit Datentabelle aus OBBC-AbfrageVielen Dank, dass Sie sich die Zeit genommen haben, es sich anzusehen. Leider hat das nicht funktioniert.
Ich habe mich an den JMP-Support gewandt, aber bis jetzt eine Antwort von ihnen erhalten. Ich bin mir nicht sicher, ob sie diese Art von technischen Fragen beantworten.
Betreff: Skript – Arbeiten mit Datentabelle aus OBBC-AbfrageHier muss ich also zugeben, dass ich New SQL Query nicht sehr oft verwende.Dein Code sieht aus richtig.Zwei Ideen hier, eine, die Sie könnte müssen in Klammern gesetzt werden (Neue SQL-Abfrage( ... ) << Ausführen), und eine andere besteht darin, eine Warteanweisung einzufügen, um sicherzustellen, dass die Abfragen tatsächlich ausgewertet werden, bevor fortgefahren wird.Versuchen Sie, Ihren Code Zeile für Zeile auszuführen und prüfen Sie, ob die n-Zeilen-Funktionen die erwartete Zahl zurückgeben.
//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( ... );
Betreff: Skript – Arbeiten mit Datentabelle aus OBBC-AbfrageHallo -
Ich habe immer noch Probleme mit der Verknüpfung beider Tabellen. Hier ist das Skript, das ich im Anschluss an Ihren Beitrag implementiert habe:
// 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%" )
);
Aber es gibt immer noch einen Fehler:

Betreff: Skript – Arbeiten mit Datentabelle aus OBBC-AbfrageSie würden eine Variable festlegen, die dem Wert der neuen SQL-Abfrage entspricht.Wenn Sie die Funktionen der höchsten Ebene Ihres Skripts verwenden, könnte es so aussehen:
//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( ... );
Betreff: Skript – Arbeiten mit Datentabelle aus OBBC-AbfrageVielen Dank für die schnelle Antwort.
Ich verstehe das Konzept, kann es aber nicht auf meinen speziellen Fall anwenden. Mein Abfrageskript sieht derzeit so aus:
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;
Mir ist klar, dass ich mein Drehbuch gleich hätte teilen sollen.
Vielen Dank für Ihre weitere Anleitung.
Betreff: Skript – Arbeiten mit Datentabelle aus OBBC-AbfrageHallo @JRS ,
Versuchen Sie, einen Verweis auf die Datentabellen beizubehalten, die Sie mit jeder ODBC-Verbindung öffnen, und diese zu verwenden, anstatt sie namentlich aufzurufen, wie folgt:
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 ),
...
);