SQL データを抽出するための日時パネルを作成する<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />こんにちは、
以前はjmpスクリプトを使用してSQLデータテーブルを抽出していました。 今日は、同じ SQL データ テーブル関数を実行するウィンドウ パネル ボックスを構築しようとしました。
シンプルなアイデアは、パネル ボックス内の 2 つの入力変数となる SQL データ テーブルを一定期間内に抽出することです。 「End_Time」には Today() 構文を簡単に使用できます。 ただし、「Start_Time」については、ユーザーがデータ テーブルを取得する End_time の特定の「時間」前に入力できるようにするスクリプトを作成しようとしました。
残念ながら、このスクリプトは期待どおりに機能しません。
jmp スクリプトの第一人者は、以下の私のスクリプトを修正してみませんか? 修正用に書いた jmp スクリプトも添付します。
どうもありがとう、
nw = new window("SQL Data Table Extraction", Vlistbox( tb1=textbox("Start_Time: "), dteb1 = numbereditbox(1), hlistbox( text box("Enter the number of hours: "), hours_teb = text edit box()), tb2=textbox("End_Time: "), dteb2 = numbereditbox(1), ), ok_button = button box("Get Data", << Open Database("DSN=;Description=;UID=;PWD=;APP=;WSID=", sql_statement, Test Data)),dteb1 << set format(format("m/d/y h:m:s", 23, 0)),dteb1 << set width(23),dteb1 << set(today()-EvalExpr((hours_tab)*60*60)),dteb2 << set format(format("m/d/y h:m:s", 23, 0)),dteb2 << set(Today())); sql_statement="SELECT * FROM dbo.TESTCOMPLETE WHERE (dCreated >= '"||Start Date/Time||"') AND (dCreated <='"||End_Date/Time||"')");
Re: SQL データを抽出するための日時パネルを作成するこんにちは、ビンス
ご指導と忍耐に感謝いたします。ようやくうまくいきました。
その下には、正しく動作するバージョンがあります。
- NamesDefaultToHere(1);
-
- // 書かれたによるヴィンス・ファラー
- // カレンダーを表示しますの上numeditbox (デフォルトに今)
- // 注意してください、これはのみ作品の上JMP11またはその上
- 日付ボックス =関数(
- {timething = Today()},
- {新しいボックス}、
- 新しいボックス = Eval(
- 代わりの(
- 名前Expr(
- 数値編集ボックス(
- timething, // Eval(Sub()) なぜならのJMPの癖
- 10, // JMP には必要ないので、これだけが必要ですデフォルト幅
- <<セット関数(
- 関数( {自分},
- {}、
- もし(はMissing( self << get )、
- 自分<<セット( Eval( DUMMY ) ) // を設定します日付に時間に関する引数
- )
- )
- )、
- <<セットフォーマット( フォーマット( 「月/日/yh:m:s」 , 23, 0) ); // 日時フォーマットを作成しますのために箱(カレンダーをプレゼント)
- )
- )、
- Expr( DUMMY )、時間のもの
- )
- );
- 新しいボックス;
- );
-
- nw =
- 新しい窓( 「SQLデータテーブルの抽出」 、
- LineUpBox(NCol(2),
- テキストボックス( 「開始日時」 )、開始 = dateBox(Today() - InDays(12))、
- テキストボックス( 「終了日時」 )、終わり= dateBox()、
- ボタンボックス( "キャンセル" 、nw <<近いウィンドウ)、ボタンボックス( 「データを取得」 、スクリプトを実行)
- ));
-
- RunScript= Expr(nw<<近い窓;
- sql_statement=evalinsert( "SELECT * FROM dbo.TESTCOMPLETE WHERE dCreated >= '^スタートDT ^' AND dCreated <= '^終了DT ^' 注文順 dCreated" );
- startDT=MDYHMS(start << get);
- endDT=MDYHMS(終わり<
- 開けるデータベース(
- 「DSN=;説明=;UID=;PWD=;APP=;WSID=」 、
- SQLステートメント、 "テスト結果" ));
Re: SQL データを抽出するための日時パネルを作成する2つのこと
- sql_statement=evalinsert( 「SELECT * FROM dbo.TESTCOMPLETE WHERE dCreated >= '^start_time^' AND dCreated <= '^end_time^' ORDER BY dCreated」 );
- これらは startDT および EndDT と同じ変数ではありません
- sql_statement は RunScript 内にある必要があります
最後の数行を次のようにすると、正常に印刷されます
nw =
新しいウィンドウ( "SQL データ テーブルの抽出",
LineUpBox(NCol(2),
TextBox("開始日時")、開始 = dateBox(Today() - InDays(12))、
TextBox("終了日時")、end = dateBox()、
ButtonBox("キャンセル", nw << ウィンドウを閉じる), ButtonBox("データを取得", RunScript)
));
RunScript= Expr(nw<<ウィンドウを閉じる;
startDT=MDYHMS(start << get);
endDT=MDYHMS(end<
sql_statement="SELECT * FROM dbo.TESTCOMPLETE WHERE dCreated >= '"||startDT||"' AND dCreated <= '"||endDT||"' ORDER BY dCreated";
print(sql_statement);
);
Re: SQL データを抽出するための日時パネルを作成する共有してくれてありがとう....ヨセフ
Re: SQL データを抽出するための日時パネルを作成するこんにちは、ビンス
私の盲点を教えてくれて、近づいてくれてありがとう。 しかし、変わった後もstartDT = MDYHMS(start<< get) format まだこの SQL スクリプトを機能させることができません。 その後も、同じ jmp 警告メッセージ「名前が解決されていません: scces の Runscript または 'RunScirpt, RunScript/*###*/」の評価が表示されます。 私のスクリプトに何か問題がありますか?
チェック用のスクリプトも添付しました。
ご協力いただきありがとうございます!
NamesDefaultToHere(1);// Written by Vince Faller// Makes a calendar come up on a numeditbox (defaults to now)// Note, this only works on JMP 11 or abovedateBox = Function({timething = Today()},{newbox},newbox = Eval(Substitute(Name Expr(Number Edit Box(timething, // Eval(Sub()) because of JMP quirk10, // Just need this because JMP doesn't default a width<Function( {self},{},If( Is Missing( self << get ),self << Set( Eval( DUMMY ) ) // Sets the date to the timething argument))),<< Set Format( Format( "m/d/y h:m:s", 23, 0 ) ); // Makes datetime format for the box (gives calendar))),Expr( DUMMY ), timething));newbox;);nw =New Window( "SQL Data Table Extraction",LineUpBox(NCol(2),TextBox("Start DateTime"), start = dateBox(Today() - InDays(12)),TextBox("End DateTime"), end = dateBox(),ButtonBox("Cancel", nw << close window), ButtonBox("Get Data", RunScript)));sql_statement=evalinsert("SELECT * FROM dbo.TESTCOMPLETE WHERE dCreated >= '^start_time^' AND dCreated <= '^end_time^' ORDER BY dCreated");RunScript= Expr(nw< startDT=MDYHMS(start << get); endDT=MDYHMS(end< Open Database( "DSN=;Description=;UID=;PWD=;APP=;WSID=", sql_statement,"Test Result"));Re: SQL データを抽出するための日時パネルを作成するstart << Get を実行した場合 (または startDT の上にマウスを置くだけ)。この値は実際には単なる数値であることがわかります。「04/11/2016 7:00:00 AM」を表す 3543202800 です。したがって、これを SQL に入力しようとすると、実際にはその数値を与えているだけになります (これは文字ではないため、連結することはできません)。変える必要がある
startDT = 開始 << get;
endDT = 終了 << get;
に
startDT = MDYHMS(start << get);
endDT = MDYHMS(end << get);
これで走れるようになるはずだと思います。
あなたのエラーに関する限り、何もないようです。 43行目以降
Re: SQL データを抽出するための日時パネルを作成する次のスクリプトを使用してSQLデータテーブルを抽出し、モーダルで時間を制限しています
::dbc = 別のアドインに挿入した自分の名前とログイン。代わりにオープン データベースを使用できます
2 つの異なるテーブル (欠陥と歩留まり) のボタンを追加しました。
パラメータ用の別のフィルタ(欠陥タイプ、歩留まりパラメータなど)
私のSQL時間列は「dayxxx」です
勝つ=新しい窓( 「データを選択」
<<モーダル、
パネルボックス( "選択する" 、
アールボックス=ラジオボックス( { "欠陥" 、 "収率" }
)
、テキストボックス( 「パラメータ」 ) 、変数ボックス1 =テキスト編集ボックス()
、テキストボックス( 「日数を挿入」 ) 、変数ボックス2 =テキスト編集ボックス()
) ;
エリア1 =アールボックス<<得る;
パラメータ=変数ボックス1 <<テキストを取得する;
日々 =変数ボックス2 <<テキストを取得する;
表1 =もし(
エリア1 == 1 、 「欠陥テーブルxxx」 、
エリア1 == 2 、 「利回りテーブルxxx」
)
;
/// SQL データ選択 ///
dt = SQLの実行( :: dbc 、
"SELECT * FROM \!"pathxxx\!".\!"" ||表1 || 「\!」
どこ \!"dayxxx\!" > (CURRENT_DATE - " ||日々 || " 日々)
および \!"パラメータxxx\!" =「」 ||パラメータ|| 「」
」
) ;
dt <<セット名( 「」 ||パラメータ|| 「」 ||日々 || 「」 ) ;
*会社のデータベース名を隠すために多くの変更を行ったので、スクリプトエラーが発生した可能性があります
Re: SQL データを抽出するための日時パネルを作成するこんにちは、ビンス
返信いただきありがとうございます。 数日前にスペルミスに気づきましたが、依然としてスクリプトを期待どおりに動作させることができません。
あなたの返答では、私は使用できないという意味ですか? Date box() 用に作成した Number Edit Box() スクリプト関数は何ですか?
「データを取得」ボタンをクリックしたときに、次の警告メッセージが表示される(下の画像を参照してください)のは問題でしょうか?
しかし、以下のスクリプトを直接実行すると、jmp が SQL サーバーからリクエスト データ テーブルを取得できるのはなぜでしょうか?
//This script is wrote to pull data within a certain time framestart_time="04/11/2016 7:00:00 AM";end_time="04/12/2016 7:00:00 PM";sql_statement=evalinsert("SELECT * FROM dbo.TESTCOMPLETEWHERE dCreated >= '^start_time^' AND dCreated <= '^end_time^' ORDER BY dCreated");Open Database( "DSN=;Description=;UID=;PWD=;APP=;WSID=",sql_statement, "Test Data");

Re: SQL データを抽出するための日時パネルを作成するnw << 閉じたウィンドウ
スクリプトがクラッシュします。
必要がある
nw<<ウィンドウを閉じる
また、キャンセルボタンに別のスペルミスがあります。
また、MDYHMS(startDT) と endDT、または SQL DateTime への他の変換も使用する必要があります。これは、JMP が数値を報告するだけで、SQL がこれを日付時刻として受け取らないためです。
Re: SQL データを抽出するための日時パネルを作成するJMP 11 を使用していますが、クエリ ビルダー機能がありません。 私たちの部門がアップグレードに同意したら、後で入手したいと考えています。 とにかく、ご指導ありがとうございました。Vince が投稿した Ian のスクリプトを試してみたところ、日付時刻ウィンドウ関数が機能しました。ただし、SQL サーバーからデータテーブルを抽出するために設計したボタンボックスを接着しようとしましたが、応答がありません。 SQLデータテーブルを抽出するために使用した元のJSLスクリプトを使用してSQLステートメントをチェックしたところ、正常に動作しました。 SQLデータテーブルを取得するためにボタンボックスを設計したスクリプトのどこかが間違っていると思います。 誰か簡単に修正してもらえますか?
どうもありがとう、
NamesDefaultToHere(1);
// ヴィンス・ファラー著
// numeditbox にカレンダーを表示します (デフォルトは now)
// 注、これは JMP 11 以降でのみ機能します
dateBox = 関数(
{timething = Today()},
{新しいボックス}、
新しいボックス = Eval(
代わりの(
名前のExpr(
数値編集ボックス(
timething, // Eval(Sub()) JMP の癖のため
10, // JMP にはデフォルトの幅がないため、これが必要です
<<関数を設定(
Function( {自分},
{}、
If( Is Missing( self << get ),
self << Set( Eval( DUMMY ) ) // 日付を timething 引数に設定します
)
)
)、
<< Set Format( Format( "m/d/yh:m:s", 23, 0 ) ); // ボックスの日時フォーマットを作成します (カレンダーを提供します)
)
)、
Expr( DUMMY )、時間のもの
)
);
新しいボックス;
);
nw =
新しいウィンドウ( "SQL データ テーブルの抽出",<<モーダル,
LineUpBox(NCol(2),
TextBox("開始日時")、開始 = dateBox(Today() - InHours(12))、
TextBox("終了日時")、end = dateBox()、
ButtonBox("キャンセル", nw << closeEindow), ButtonBox("データの取得", RunScript)
));
sql_statement = evalinsert("SELECT * FROM dbo.TESTCOMPLETEWHERE dCreated >= '^startDT^' AND dCreated <= '^endDT^'ORDER BY dCreated");
RunScript= Expr(nw<<閉じたウィンドウ;
startDT = 開始 << get;
endDT = 終了 << get;
データベースを開く(
"DSN=;説明=;UID=;PWD=;APP=;WSID=1",
SQLステートメント、
"テスト結果"));
Re: SQL データを抽出するための日時パネルを作成するずっと良くなりました、エリック! JSL を避けることは決して悪い戦略ではありません。 このオプションを見落として申し訳ありません。
Re: SQL データを抽出するための日時パネルを作成するやあ、バーニー426、
JMP 12 を使用している場合は、この種の処理にクエリ ビルダーの使用を検討してください (まだ JMP 12 に対応していない場合は、そこに到達するように努めてください ;-)。クエリ ビルダーを使用すると、フィルタリングされた SQL クエリを対話的に作成でき、それらのフィルタをプロンプトに変えることができます。クエリ ビルダーが作成された主な理由は、あなたのような状況を想定していました。構築中のクエリは次のようになります。

よく見るとわかります(プロンプト)フィルターの横にあります。次に、クエリを実行すると、変数の形式に応じて日付ピッカーまたは日付時刻ピッカーを自動的に表示するプロンプトが表示されます。

今すぐではないにしても、将来のために考えるべきこと。
HTH、
エリック
Re: SQL データを抽出するための日時パネルを作成する日付を選択する際に参考にしていただきたいのは、このスレッドあまりにも。 したがって、コードを使用すると、親切にによって書かれたビンス・フェラーより多くの機能が提供されるため、この種のアプローチを試してみることをお勧めします。
名前デフォルトここへ( 1 ) ;
// ヴィンス・ファラー著
// numeditbox にカレンダーを表示します (デフォルトは now)
// 注、これは JMP 11 以降でのみ機能します
日付ボックス=関数(
{時事=今日()} 、
{新しいボックス} 、
新しいボックス=評価(
代わりの(
名前の説明(
数値編集ボックス(
時事、 // JMP の癖のため Eval(Sub())
10 、 // JMP にはデフォルトの幅がないため、これが必要です
<<セット機能(
関数( {自己} 、
{} 、
もし(不足している(自己<<得る) 、
自己<<セット(評価(ダミー) ) // timething 引数に日付を設定します
)
)
) 、
<<フォーマットの設定(フォーマット( 「月/日/yh:m:s」 、 23 、 0 ) ) ; // ボックスの日時フォーマットを作成します (カレンダーを提供します)
)
) 、
エクスプレッション(ダミー) 、時事
)
) ;
新しいボックス;
) ;
新しい=
新しい窓( 「日付と時刻の範囲」 、
ラインアップボックス( Nコル( 2 ) 、
テキストボックス( 「開始日時」 ) 、始める=日付ボックス(今日() -時間内( 12 )) 、
テキストボックス( 「終了日時」 ) 、終わり=日付ボックス() 、
ボタンボックス( "キャンセル" 、新しい<<閉じる) 、ボタンボックス( "わかりました" 、 runScript )
)
) ;
runScript =
エクスプレッション(
新しい<<ウィンドウを閉じる;
スタートDT =始める<<得る;
終了DT =終わり<<得る;
印刷する(スタートDT 、終了DT ) ;
) ;
私はしませんでした元のコードを詳しく調べてください。しかし、「/」を含む変数名を付けようとしていたことがわかりました。「Name()」も使用しない限り、これは許可されません。 できることとできないことの詳細については、「ヘルプ > 書籍 > スクリプト ガイド」を参照してください。