五、按时段查询各频道当前正在播出和即将播出的节目
1.建立数据窗口对象d_sdcx(时段查询),按pd(频道)分组,将细节带向上拖,使细节信息隐蔽起来,而只显示出标题和组信息。分组各项直接用字段名。
第二、三个标签页上的数据窗口空件dw_2、dw_3均与d_sdcx挂接。
2.相关的查询项
ddlb_1(星期)、em_1(时间选择)
3."查询"按钮clicked代码
如果Tab_1.SelectedTab不等于1,即选中的是第二、三标签页,则执行下列代码:
string jstj1,jstj2 //条件表达式变量
jstj1="xq='"+ddlb_1.text+"' and sj<='"+em_1.text+"'" //当前节目检索条件
jstj2="xq='"+ddlb_1.text+"' and sj>='"+em_1.text+"'" //下个节目检索条件
tab_1.tabpage_2.dw_2.SetSort("pd A,sj A") //当前节目排序(时间升序)
tab_1.tabpage_2.dw_2.Sort( )
tab_1.tabpage_3.dw_3.SetSort("pd A,sj D") //下个节目排序(时间降序)
tab_1.tabpage_3.dw_3.Sort( )
tab_1.tabpage_2.dw_2.SetFilter(jstj1) //当前节目检索
tab_1.tabpage_2.dw_2.Filter( )
tab_1.tabpage_2.dw_2.GroupCalc() //重新计算、显示组信息
tab_1.tabpage_3.dw_3.SetFilter(jstj2) //下个节目检索
tab_1.tabpage_3.dw_3.Filter( )
tab_1.tabpage_3.dw_3.GroupCalc()
本段程序在第二标签页上显示出当前正在播出的节目,在第三标签页上显示出即将播出的节目。这是最具特色的部分。
数据窗口内容按sj(时间)升序排列,并按条件筛选,即可显示出指定时间各频道正在播出的节目,实际上是满足条件各组细节区的最后一条记录内容(节目的播出时间为小于或等于指定时间的最大值)。
数据窗口内容按sj降序排列,按同一条件筛选,可显示出指定时间各频道即将播出的节目(节目的播出时间为大于或等于指定时间的最小值)。
六、用滚动条指定时间
通过移动滚动条的滑块,将当前滑块位置值转换为时间值,存放在编辑框中作为查询条件的一部分。滚动条滑块moved事件的代码为(仅以起始时间滚动条htb_1为例):
integer hh,mm,n //时、分、分钟数变量
n=int(14.39*htb_1.position) //滚动条位置值转换为数值(分钟数,100对应1439)
hh=int(n/60) //转换为时
mm=mod(n,60) //转换为分
em_1.text=string(hh)+":"+string(mm) //显示时间
七、使用
使用时,首先通过"节目下载"超级链接,到中央电视台网站下在节目时间表,将其保存到本地硬盘的任意一个文件夹并解压缩,单击"清除"按钮,删除tv_tab表中原有记录,单击"导入"按钮,将指定频道的节目信息导入数据库。接下来,选择"任意查询"标签页,可按频道、星期、节目名称和时间范围进行查询,选择"当前节目"或"下个节目"标签页,可查看指定时间正在播出或即将播出的节目。
"清除"按钮用来删除tv_tab表中全部记录,主要代码为:
DELETE FROM "tv_tab" ;
"全部"按钮的作用是清除查询条件并将时间范围设置为最大。以显示全部记录。
"此时"按钮用来将当前时间设置到em_1,使htb_1滚动条按当前时间定位,并将当前星期作为ddlb_1.text的值。也就是要按现在时刻进行查询。查询结果如图3、4所示。
(图3)
(图4)






