創建日期時間面板來提取 SQL 數據<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />你好,
我曾經使用jmp腳本來提取sql數據表。 這天我嘗試構建一個窗口面板框來執行相同的sql數據表功能。
簡單的想法是提取一段時間內的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||"')");
回复:創建日期時間面板來提取 SQL 數據嗨文斯,
感謝您的指導和耐心。最後我把它解決了。
下面是正確且有效的版本。
- 名稱默認到這裡(1);
-
- // 已寫經過文斯·法勒
- // 彈出日曆在一個數字編輯框(默認到現在)
- // 注意,這個僅有的作品在JMP 11或者多於
- 日期框 =功能(
- {timething = 今天()},
- {新框},
- 新框=評估(
- 代替(
- 姓名表達式(
- 數字編輯框(
- timething, // Eval(Sub()) 因為的JMP 怪癖
- 10, // 只需要這個,因為 JMP 不需要默認寬度
- <<放功能(
- 功能( {自己},
- {},
- 如果(是缺失(自我 << 得到),
- 自我<<放( Eval( DUMMY ) ) // 設置日期到時間論證
- )
- )
- ),
- <<放格式( 格式( “月/日/年:月:秒” , 23, 0 ) ); // 設置日期時間格式為了盒子(提供日曆)
- )
- ),
- Expr( DUMMY ), 時間
- )
- );
- 新盒子;
- );
-
- 西北=
- 新窗戶( 《SQL數據表提取》 ,
- LineUpBox(NColl(2),
- 文本框( “開始日期時間” ), 開始 = dateBox(Today() - InDays(12)),
- 文本框( “結束日期時間” ),結尾= 日期框(),
- 按鈕框( “取消” , 西北 <<關閉窗口),按鈕框( “獲取數據” 、運行腳本)
- ));
-
- RunScript= Expr(nw<<關閉窗戶;
- sql_語句=evalinsert( “從 dbo.TESTCOMPLETE 中選擇 *,其中 dCreated >= '^開始DT ^' AND dCreated <= '^結束DT ^' 按 dCreated 排序" );
- startDT=MDYHMS(開始 << 獲取);
- 結束DT=MDYHMS(結尾<<獲取);
- 打開數據庫(
- “DSN=;描述=;UID=;PWD=;APP=;WSID=” ,
- sql_語句, “測試結果” ));
回复:創建日期時間面板來提取 SQL 數據兩件事情
- sql_語句=evalinsert( “從 dbo.TESTCOMPLETE 中選擇 *,其中 dCreated >= '^start_time^' AND dCreated <= '^end_time^' ORDER BY dCreated” );
- 這些變量與 startDT 和 EndDT 不同
- sql_statement 應該位於 RunScript 內部
如果我讓最後幾行看起來像這樣,它打印得很好
西北=
新窗口("SQL數據表提取",
LineUpBox(NColl(2),
TextBox("開始日期時間"), start = dateBox(Today() - InDays(12)),
TextBox("結束日期時間"), end = dateBox(),
ButtonBox("取消", nw << 關閉窗口), ButtonBox("獲取數據", RunScript)
));
RunScript= Expr(nw<<關閉窗口;
startDT=MDYHMS(開始 << 獲取);
endDT=MDYHMS(結束<
sql_statement="SELECT * FROM dbo.TESTCOMPLETE WHERE dCreated >= '"||startDT||"' AND dCreated <= '"||endDT||"' ORDER BY dCreated";
打印(sql_語句);
);
回复:創建日期時間面板來提取 SQL 數據感謝分享....蓋伊·約瑟夫
回复:創建日期時間面板來提取 SQL 數據嗨文斯,
感謝您引導我突破盲點,讓我更接近。 然而,即使改變之後startDT = MDYHMS(start<< get) 格式 我仍然無法讓這個 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"));回复:創建日期時間面板來提取 SQL 數據如果運行 start << Get (或將鼠標懸停在 startDT 上)。您會看到該值實際上只是一個數字,3543202800 表示“04/11/2016 7:00:00 AM”。因此,當您嘗試將其放入 SQL 中時,您實際上只是給出了該數字(這不是字符,因此您無法將其連接起來)。你需要改變
startDT = 開始 << 獲取;
endDT = 結束 << 得到;
到
startDT = MDYHMS(開始 << 獲取);
endDT = MDYHMS(結束 << 得到);
我想這應該讓你跑。
至於你的錯誤,看起來好像沒有 ;在你的第 43 行之後
回复:創建日期時間面板來提取 SQL 數據我正在使用以下腳本提取 SQL 數據表並限制模式中的時間
::dbc = 我在不同的加載項中插入的我的姓名和登錄名,您可以使用開放數據庫代替
我為 2 個不同的表添加了按鈕(缺陷和良率)
另一個參數過濾器(缺陷類型、產量參數等)
我的 SQL 時間列是“dayxxx”
贏=新窗戶( “選擇數據”
<<莫代爾,
面板盒( “選擇” ,
盒子=收音機盒( { “缺點” , “屈服” }
)
,文本框( “範圍” ) ,變量框1 =文本編輯框()
,文本框( “插入天數” ) ,變量框2 =文本編輯框()
) ;
區域1 =盒子<<得到;
參數=變量框1 <<獲取文本;
天=變量框2 <<獲取文本;
表格1 =如果(
區域1 == 1 , “缺陷表xxx” ,
區域1 == 2 , “產量表xxx”
)
;
/// SQL數據選擇 ///
dt =執行SQL ( ::數據庫,
"從\!"pathxxx\!"中選擇*。\!"" ||表格1 || “\!”
哪裡\!"dayxxx\!" > (CURRENT_DATE - " ||天|| “ 天)
AND \!"parameterxxx\!" = '" ||參數|| ”'
”
) ;
dt <<設置名稱( ”” ||參數|| ” “ ||天|| ”” ) ;
*我做了很多修改來隱藏我的公司數據庫名稱,所以我可能會犯一些腳本錯誤
回复:創建日期時間面板來提取 SQL 數據嗨文斯,
謝謝回复。 我幾天前就發現了拼寫錯誤,但仍然無法讓我的腳本按預期工作。
在您的回復中,您的意思是我不能使用您曾經為日期框()編寫的數字編輯框()腳本函數?
這是我在點擊“獲取數據”按鈕時收到以下警告消息(請參見下圖)的問題嗎?
但是為什麼如果我直接運行下面的腳本,jmp就能從sql server中拉取請求數據表呢?
//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");

回复:創建日期時間面板來提取 SQL 數據nw << 關閉的窗口
會使腳本崩潰。
你需要
nw<<關閉窗口
您的取消按鈕中還有另一個拼寫錯誤。
您還應該使用 MDYHMS(startDT) 和 endDT,或其他一些到 SQL DateTime 的轉換,因為 JMP 只會報告一個數字,而 SQL 不會將其視為日期時間。
回复:創建日期時間面板來提取 SQL 數據我使用的是 JMP 11,它沒有查詢生成器功能。 如果我們部門同意升級,希望以後能得到一個。 不管怎樣,謝謝你的指導。我嘗試了 Vince 發布的 Ian 腳本,並且日期時間窗口函數有效。然而,當我嘗試粘貼我設計的從sql server中提取數據表的按鈕框時,它沒有任何響應。 我用我用來提取sql數據表的原始jsl scipt檢查了sql語句,它工作正常。 我猜想按鈕框拉取sql數據表的腳本有問題。 任何人都可以採取快速解決辦法嗎?
非常感謝,
名稱默認到這裡(1);
// 文斯·法勒 撰寫
// 讓日曆出現在 numeditbox 上(默認為現在)
// 注意,這僅適用於 JMP 11 或更高版本
日期框 = 函數(
{timething = 今天()},
{新框},
新框=評估(
代替(
名稱表達式(
數字編輯框(
timething, // Eval(Sub()) 因為 JMP 怪癖
10, // 只需要這個,因為 JMP 沒有默認寬度
<<設置函數(
函數({自我},
{},
如果(缺少( self << get ),
self << Set( Eval( DUMMY ) ) // 將日期設置為 timething 參數
)
)
),
<< 設置格式( Format( "m/d/yh:m:s", 23, 0 ) ); // 為框設置日期時間格式(提供日曆)
)
),
Expr( DUMMY ), 時間
)
);
新盒子;
);
西北=
New Window( "SQL數據表提取",<
LineUpBox(NColl(2),
TextBox("開始日期時間"), start = 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 = 開始 << 獲取;
endDT = 結束 << 得到;
打開數據庫(
"DSN=;描述=;UID=;PWD=;APP=;WSID=1",
sql_語句,
“測試結果”));
回复:創建日期時間面板來提取 SQL 數據好多了,埃里克! 避免 JSL 絕不是一個壞策略。 抱歉忽略了這個選項。
回复:創建日期時間面板來提取 SQL 數據嘿,伯尼426,
如果您使用的是 JMP 12,請考慮使用查詢生成器來執行此類操作(如果您尚未使用 JMP 12,請嘗試使用該工具;-)。查詢生成器允許您以交互方式創建過濾的 SQL 查詢,並且您可以將這些過濾器轉換為提示。創建查詢生成器的主要原因是為了像您一樣的情況。以下是構建查詢時的樣子:

如果你仔細觀察你會發現(迅速的)過濾器旁邊。然後,當運行查詢時,您會收到一條提示,該提示將自動顯示日期選擇器或日期時間選擇器,具體取決於變量的格式:

一些值得思考的事情,即使不是現在,也是為了未來。
哈特哈,
埃里克
回复:創建日期時間面板來提取 SQL 數據在選擇日期時間方面,您可能想看看這個線程也。 所以使用代碼親切地寫於文斯·費勒您可能想嘗試這種方法,因為它提供了更多功能:
名稱默認到這裡( 1 ) ;
// 文斯·法勒 撰寫
// 讓日曆出現在 numeditbox 上(默認為現在)
// 注意,這僅適用於 JMP 11 或更高版本
日期框=功能(
{時間事物=今天()} ,
{紐盒} ,
紐盒=評估(
代替(
名稱表達式(
數字編輯框(
時間事物, // Eval(Sub()) 因為 JMP 怪癖
10 , // 只需要這個,因為 JMP 沒有默認寬度
<<設置功能(
功能( {自己} ,
{} ,
如果(不見了(自己<<得到) ,
自己<<放(評估(假的) ) // 將日期設置為 timething 參數
)
)
) ,
<<設置格式(格式( “月/日/年:月:秒” , 23 , 0 ) ) ; // 為框設置日期時間格式(提供日曆)
)
) ,
表達式(假的) ,時間事物
)
) ;
紐盒;
) ;
西北=
新窗戶( “日期時間跨度” ,
排隊框( NCOL ( 2 ) ,
文本框( “開始日期時間” ) ,開始=日期框(今天() -幾小時內( 12 )) ,
文本框( “結束日期時間” ) ,結尾=日期框() ,
按鈕盒( “取消” ,西北<<關閉Eindow ) ,按鈕盒( “好的” ,運行腳本)
)
) ;
運行腳本=
表達式(
西北<<關閉窗口;
開始DT =開始<<得到;
結束DT =結尾<<得到;
打印(開始DT ,結束DT ) ;
) ;
我沒有詳細檢查您的原始代碼,但我確實看到您試圖使用包含“/”的變量名稱,除非您還使用“Name()”,否則這是不允許的。 請參閱“幫助 > 書籍 > 腳本指南”,了解有關可以做什麼和不能做什麼的更多詳細信息。