创建日期时间面板来提取 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()”,否则这是不允许的。 请参阅“帮助 > 书籍 > 脚本指南”,了解有关可以做什么和不能做什么的更多详细信息。