messagebox('错误','无法取得程序运行路径')haltelseif ll_apphandler<0 then//编译模式
ls_apppath=ls_appname
ls_strtmp=reverse(ls_apppath)
li_pos=pos(ls_strtmp,'\',1)
ls_strtmp=mid(ls_strtmp,li_pos+1)
ls_apppath=reverse(ls_strtmp)
else //PB环境下运行
ls_apppath='D:\ScaleWinInterface'//据实际情况改变
ls_appname=ls_apppath+'\mainexe'//同上lb_c=falseend ifend if其中声明PUBLIC FUNCTION uLong GetModuleFileName(ulong hModule,ref string lpFileName,ulong nSize) LIBRARY "kernel32dll" ALIAS FOR "GetModuleFileNameA"
这样ls_apppath即为执行程序的路径。
ls_appname为路径(包括文件名)
以上是得到当前运行程序的路径,如果要得到其他文件的路径,如果知道这个文件名,也就知道它的路径了,不必再找,如果想查找符合某个文件名的所有文件的路径,就要做目录遍历了。这个可以到网站找例子。
%是用来做字符串匹配的,比如在数据窗口的find函数中使用:
//查找dw_emp中emp_name字段值含有ls_name字符的数据
string ls_name
long ll_nbr, ll_foundrow
ll_nbr = dw_empRowCount()
ls_name = Trim(sle_NameText)
ll_foundrow = dw_empFind( "emp_name like '%" + ls_name + "%'", 1, ll_nbr)
%代表任意字符(可以是一个或多个),可以写在要查找字符的前后都可以,比如
ll_foundrow = dw_empFind( "emp_name like '张%' ", 1, ll_nbr)表示查找姓张的人
ll_foundrow = dw_empFind( "emp_name like '%磊' ", 1, ll_nbr)表示查找名字最后一个字是磊的人
ll_foundrow = dw_empFind( "emp_name like '%磊%' ", 1, ll_nbr)表示查找名字中含磊字的人
在PowerBuilder中使用数据窗口检索到的数据往往是无序的 虽然可以通过设置Select语句实现排序的功能 但是数据窗口一旦生成都无法进行动态调整
一 准备工作
为了更好地比较三种不同的方法 dw 中的数据来自两个表student和class student表中包含四个字段sid(学号) sname(姓名) saddr(住址)和cid(班号) class表中包含两个字段cid(班号)和cname(班级名称)
二 三种方法的源程序
三种方法中的 执行 按钮的代码分别为
方法 :用SetSQLselect()
string ls oldsql ls newsql ls order ls column
ls oldsql=dw getsqlselect()
choose case ddlb text
case ″学号″ls column=″sid″
case ″姓名″ls column=″sname″
case ″住址″ls column=″saddr″
case ″班号″ls column=″class cid″
case ″班级名称″ ls column=″cname″
end choose
if rb checked then ls order=″ASC″
else ls order=″DESC″
end if
ls newsql=ls oldsql+″ ORDER BY ″+ &
ls column+″ ″+ls order
if dw setsqlselect(ls newsql)= then
messagebox(″警告″ ″数据设置失败″ stopsign!)
else dw settransobject(sqlca)
dw reset()
dw retrieve()
dw setsqlselect(ls oldsql)
end if
方法 :用describe()和modify()
lishixinzhi/Article/program/PB/201311/24607
string ls mod ls order ls old ls column
ls old=dw describe(′datawindow table select′)
dw settransobject(sqlca)
choose case ddlb text
case ″学号″ls column=″sid″
case ″姓名″ls column=″sname″
case ″住址″ls column=″saddr″
case ″班号″ls column=″class cid″
case ″班级名称″ ls column=″cname″
end choose
if rb checked then ls order=″ASC″
else ls order=″DESC″
end if
ls mod=″datawindow table select=′ ″+ls old+&
′ORDER BY ″ ′+ls column+′ ″ ′+ls order+″ ′ ″
dw modify(ls mod)
dw retrieve()
dw modify(″datawindow table select= &
′ ″+ls old+″ ′ ″)
方法 :用setsort()和sort()
string ls sort ls order ls column
choose case ddlb text
case ″学号″ ls column=″# ″
case ″姓名″ ls column=″# ″
case ″住址″ ls column=″# ″
case ″班号″ ls column=″# ″
case ″班级名称″ ls column=″# ″
end choose
if rb checked then ls order=″A″
else ls order=″D″
end if
ls sort=ls column+′′+ls order
dw setsort(ls sort)
dw sort()
三 三种方法的比较
第一种和第二种方法要求数据窗口在生成时是无序的 第三种方法无此要求
对于来自不同表单的相同的列名(如student cid class cid)用第二种方法排序实现起来较麻烦 因为在用modify()函数时要特别注意引号的使用 但是第二种方法比第一种方法的执行速度要快
第三种方法使用起来最方便 既可以引用列名也可引用列号(如# 表示第四列)来指定序列
编辑推荐
ASP NET开发培训视频教程
Microsoft NET框架程序设计视频教程
lishixinzhi/Article/program/PB/201311/24608
主要问题在于这句:
UPDATE"t_user" SET "t_user""Mm" = :ls_b where "t_user""yhbm" =:ls_yhbm;
表名和字段名不应该用引号括起来。
另外,提醒楼主,关于rollback和commit,稳健一点的写法是:把它们写在messagebox语句之前,因为你无法确定用户什么时候去点击提示框的确定,写在之后的话,如果用户没有点确定而离开了计算机,那么数据表将长时间的保持在事务未决状态。
-------------------
补充一下,又发现你一个问题,这句:
if sqlcasqlcode<>-1 then
应该是
if sqlcasqlcode<>0 then
也就是说,不为0时,是执行失败。
以上就是关于PB怎样获取文件路径用什么函数谢谢!!全部的内容,包括:PB怎样获取文件路径用什么函数谢谢!!、% 在PB 程序中的用法、PB中实现数据窗口动态排序的三种方法[1]等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)