二 查询系统的制作
制作从键盘输入记录号 可查询到该人的档案记录
①制作查询窗口 步骤为 鼠标点按Window图标 新建一窗口 在窗口中 添加一个DataWindow控件 在DataWindow控件上按鼠标右键 选择并单击Properties快捷菜单项 在在Datawindow object name旁按Browse按钮 选择装入前面制作的aaa数据窗口 调整好窗口的大小 再在窗口上放一SingleLineEdit控件 和一CommandButton按钮控件 点中按钮控件并按右键选择Properties 将其显示文本修改为 查询 按钮名称仍为cb_ 点中按钮控件并按右键选择Script… 输入以下脚本
dw_ settransobject(sqlca)
dw_ retrieve(sle_ text)
关闭并保存 按Save图标保存该窗口 窗口取名为aaa
②将查询窗口连接入test应用程序内 点按Application图标 出现test应用程序 双击test 出现名为w_genapp_frame的窗口图标 这是应用程序为我们提供的主窗口的名字 点按w_genapp_frame不放按右键选edit 出现该主窗口 将一按钮控件放入该窗口 按钮显示的文本可改为 唯一查询 也可省略不改 点中该按钮控件并按右键选择Script… 输入 open(aaa) 保存 点按Application图标 再按script图标 出现应用程序的自动生成的主体脚本 部分内容如下 它的任务是将数据库初始化 相当于win ini 假若不要应用程序的模板 则下面的脚本需自己输入 而使用模板后 现在我们只需将//connect 前面的注释号 // 符号删除即可 除省事外还避免了因为排版引起的下面的程序格式错误 (本人经常因为书中个别字母印刷错 或排版引起的程序格式错误造成程序无法运行而痛心不已 )
sqlca DBMS = ProfileString (ls_startupfile database dbms )sqlca database = ProfileString (ls_startupfile database database )sqlca userid = ProfileString (ls_startupfile database userid )sqlca dbpass = ProfileString (ls_startupfile database dbpass )sqlca logid = ProfileString (ls_startupfile database logid )sqlca logpass = ProfileString (ls_startupfile database LogPassWord )sqlca servername = ProfileString (ls_startupfile database servername )sqlca dbparm = ProfileString (ls_startupfile database dbparm )connect;
现在按Run图标运行该程序 结果如下图 为简化程序 我们只加入了多媒体中的字段 成功后 读者可自已增加动画 声音字段
讨论 假若多媒体的字段和数据个数比较少 也可用变量和函数来解决 如
temp =temp+ bmp p_ picturename=temp ole_ insertfile( sample avi )run( c:\acdsee exe c:\aa bmp normal!)
lishixinzhi/Article/program/SQL/201311/16400
筛选,是用filter还是retrieve直接查询?
如果是retrieve查询,可以设置两个参数,然后做dw_1retrieve(arg1, arg2)
如果在已经有数据的dw中过滤筛选的话,可以设置筛选的条件
dw_1setfilter("条件1 and 条件2")
dw_1filter()
例如筛选部门10001中员工张三的数据
dw_1setfilter("emp_name = '张三' and dept_id = '10001'")
dw_1filter()
FIND() 用法:
long ll_find
ll_find = dw_2find("yhmc="+trim(sle_1text)+"",1,dw_2rowcount() )
//查找dw_2中的用户名称=sle_1文本控件的值,从dw_2第一行到 最后一行,返回该行行数。
dw_2scrolltoRow(ll_find)//设置该行为焦点,滚动到该行。
一般情况下,我们要逐条查找数据窗口中满足某一条件的记录进行处理的时候,我们的代码经常会是下面这种:
ll_findrow=dwfind(findclause,1,dwrowcount())
do while ll_find>0
<>
ll_findrow=dwfind(findclause,ll_findrow+1,dwrowcount())
loop
这种写法最大的陷阱在于,PB的FIND函数在查找的时候,当参数中起始行大于终止行的时候,会从下往上进行查找,而对参数中的起始行和终止行是否有效行不作限制。
因此,一旦数据窗口中最后一条记录满足条件时,当处理完最后一条记录后,再去执行FIND的时候,由于ll_findrow+1已经大于dw_rowcount(),PB将会从ll_findrow+1行到dwrowcount()行开始反向查找满足条件的记录,此时函数仍将返回数据窗口的最后一行,结果就导致程序进行死循环。
所以,为避免出现死循环,一般应在循环的FIND语句前判断ll_findrow是否已超出数据窗口的记录条数,超出则跳出循环。
不过,还有一种更简单的避免死循环的代码写法如下:
ll_findrow=dwfind(findclause,1,dwrowcount())
do while ll_find>0 <> ll_findrow=dwfind(findclause,ll_findrow+1,dwrowcount() +1 )
loop
另外:
用法Find()函数在进行查找时区分大小写因此当应用程序在某列中查找某个值
时大小写匹配的行才是找到的行。
当应用程序使用循环方式查找满足条件的所有行时要注意不要形成死循环下面是。
段循环查找满足指定条件行的一个示例。
long ll_find = 1, ll_end
ll_end = dw_mainRowCount()
ll_find = dw_mainFind(searchstr, ll_find, ll_end)
DO WHILE ll_find > 0
// 处理找到的行
ll_find++
// 防止死循环
IF ll_find > ll_end THEN EXIT
ll_find = dw_mainFind(searchstr, ll_find, ll_end)
LOOP
以上就是关于用PB开发多媒体数据库管理系统(二)全部的内容,包括:用PB开发多媒体数据库管理系统(二)、pb编程 要同时筛选2个字段的内容 程序要怎么写、pb如何用FIND函数实现查找并转移焦点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)