PB常见基本问题初步总结

lmby 2003-11-01 09:54:41
加精
版内有一些问题被问过n遍了,可是还是有人在问题,现在做如下的总结,不足的地方兄弟们请给予修正,给予填充,使这个贴更充实些。

在提问前一定要先搜索一下,查看一下各分版的faq及精华区,看是否有同类的问题

1.怎么得到Group的count?
A.cumulativeSum( if( 分组列名[-1] = 分组列名[0],0,1) for all )
B.GetRow() - First(GetRow() for Group 1) + 1
C.count(分组的字段 for all distinct)
2.怎么得到Group的行号?
cumulativeSum( 1 for group 1 )
3.如何给一个子数据窗口传参数?
datawindowchild ldwc_name
ldwc_name = dw_name.getchild( 'column', ldwc_name )
//如果开始不知道dddw的检索参数是什么,可以欺骗dddw,让他认为已有了数据:
ldwc_name.insertrow( 0 )
dw_name.retrieve()
//如果你知道检索参数了:
ldwc_name.settransobject( sqlca )
ldwc_name.retrieve( arguments )
dw_name.settransobject( sqlca )
dw_name.retrieve()
4.如何比较两个时间(date)类型的数据之间的相差的天数?
date ld_date1, ld_date2
long ll_diff
ll_diff = daysafter( ld_date1, ld_date2 )
5.DW中,各行数据用不同颜色来显示
background.color express:
if( mod(getrow(),2)=0, rgb(0,255,0), rgb(255,255,255) )
6.窗口中控件visible属性的操作问题
way1: 在窗口画板的design菜单里选option,点上show invisible复选框。
way2:在edit菜单里选control list,选择你要找的按钮,然后在property里点 上visible复选框。
7.怎样在dw中加计算列
在summary带放计算域,如sum( column for all )
8.如何取服务器时间,更改本地时间?
FUNCTION ulong SetLocalTime(any lpSystemTime) LIBRARY "kernel32.dll"
结构str_systime(unsignedinteger: year,month,day,hour,minute,second)
datetime dt_server
str_systime lstr_tmp
select getdate() into :dt_server from sysfiles;
lstr_tmp.year=year(date(dt_server))
lstr_tmp.month=month(date(dt_server))
lstr_tmp.week=daynumber(date(dt_server)) - 1
lstr_tmp.day=day(date(dt_server))
lstr_tmp.hour=hour(time(dt_server))
lstr_tmp.minute=minute(time(dt_server))
lstr_tmp.second=second(time(dt_server))
SetLocalTime(lstr_tmp)
9.怎么屏蔽datewindow中的回车按键?
pbm_dwnprocessenter:return 1
10.dddw的增量查询?
datawindowchild ldwc_name
dw_name.getchild( "column", ldwc_name )
//dw_name:editchanged
ldwc_name.setfilter( "column Like '%" + upper( data ) + "%'" )
ldwc_name.filter()
11.如何动态改变dw的sql?
string ls_sql, ls_new_sql
ls_sql = dw_name.getsqlselect()
ls_new_sql = ls_sql + 'statement'
dw_name.setsqlselect( ls_new_sql )
dw_name.settransobject( sqlca )
dw_name.retrieve()
12.怎么知道数据窗口中哪些行修改了?
long i
dwitemstatus lds_status
for i = 1 to dw_name.rowcount()
lds_status = dw_name.getitemstatus( i, 0, primary! )
if lds_status <> notmodified! then
//本行修改了
end if
next
13.如何动态修改数据窗口列的风格?
dw_name.object.columnname.edit.style = 'dddw'//or other style
dw_name.object.columnname.edit.case = 'any'//change back to edit
...全文
642 55 打赏 收藏 转发到动态 举报
写回复
用AI写文章
55 条回复
切换为时间正序
请发表友善的回复…
发表回复
yfh814 2003-12-25
  • 打赏
  • 举报
回复
我靠,这些怎么都这么难啊。我都看不太懂,还是什么基础类的。看来PB真的很深
eminena 2003-12-16
  • 打赏
  • 举报
回复
转:

在程序运行过程中,要动态的改变DataWindow控件窗口中内容的可用多种方法实现:
1.创建多个DataWindow对象,在程序运行时,通过一按钮控件的Click事件来改变DataWindow对象
if dw_control.dataobject=d_object1 then
dw_control.dataobject=d_object2
else
dw_control.dataobject=d_object1
end if
dw_control.settransobject(SQLCA)
dw_control.retrieve()
2.使用setsqlselect函数
dw_control.setsqlselect("select * from table1")
dw_control.retrieve()
3.使用modify函数
dw_control.modify("datawinodw.table.select='select * from table1'")
4.使用create(syntax{,errorbuffer})函数
syntax有三种方法实现:
调用libraryexport()
调用syntaxfromsql()
用户自定义
如:
string ls_select,ls_present
ls_select="select * from table1 where name like 'l%'"
ls_present="style(type=form)"
ls_syntax=SQLCA.syntaxfromsql(ls_select,ls_present)
dw_control.create(ls_syntax)
dw_control.settransobject(SQLCA)
dw_control.retrieve()
5.或者自己动态创建一个DataWindow控件
打开new user boject 对话框,创建一标准DataWindow类用户对象
根据需要对控件增加功能,并保存到用户库中
在程序中调用函数:openuserobject(userobjectvar{,x,y})
窗口关闭前清除对象:closeuserobject()
hzhxxx 2003-12-11
  • 打赏
  • 举报
回复
刚才急着去吃饭没有把最新的方法法上来:
for i =1 to ll_row_count

ll_row = dw_xx.findgroupchange(i,1)
if ll_row = 0 or ll_row = ll_row_temp then continue
ll_row_temp = ll_row
.........................
ll_group_count[ll_i_2]=dw_1.object.计算列的名字[ll_row]
ll_i_2 ++
..........
next
这样应该就不需要消除重复项的工作
firewinter 2003-11-27
  • 打赏
  • 举报
回复
UP!!!

好东东!
pfengk 2003-11-24
  • 打赏
  • 举报
回复
UP 一下有什么好东西也可以灌一灌。
aaaadalanchong 2003-11-14
  • 打赏
  • 举报
回复
已收藏,各位大哥,谢过。
mbl 2003-11-14
  • 打赏
  • 举报
回复
OK
debonair_wei 2003-11-12
  • 打赏
  • 举报
回复
收藏
dragon0615 2003-11-08
  • 打赏
  • 举报
回复
顶啊。
好东东。

另问:
用openwithparm打开一个response窗口
response窗口返回stringparm值能为空吗?
daluobo 2003-11-08
  • 打赏
  • 举报
回复
确实不错,真好。

没有想到布衣和一滴水还在这混,真是难得呀。
zhangdatou 2003-11-08
  • 打赏
  • 举报
回复
jeff_107 2003-11-08
  • 打赏
  • 举报
回复
顶哦,顶哦

其实总觉得这样太累了,每次一碰到什么问题就来问(几乎所有问题都是问过的),收集了一大堆资料,想用的时候又找不到,这样效率太低了,

有个想法,如果能做一个巨大的东东,把我们平时使用pb遇到的问题以及一些心得全部做进去,然后不停的往里加,以后只要有问题就拿出此东东进行查找,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
mittee 2003-11-08
  • 打赏
  • 举报
回复
打开软键盘:
run("osk.exe")
lmby 2003-11-08
  • 打赏
  • 举报
回复
to teng_ys(我菜故我在) :

谢谢你。可是备份时要注意数据库的排它使用。你可以连master,而且需要提示用户。
彷徨的龙 2003-11-08
  • 打赏
  • 举报
回复
//恢复数据库,程序拷贝
string ls_filename,named,ls_ml,gs_dir
long ll_value
string mtext
//得到当前目录
if messagebox('提示','恢复数据库,会覆盖现有数据库,且无法修复,是否继续?',&
question!,yesno!,2) = 2 then return
ll_value = GetFileopenName("请选择要恢复的数据库文件",&
ls_filename, named,"backup","数据库文件(*.db),*.db")
gs_dir=GetCurrentDirectory()
if ll_value <> 1 then return
ChangeDirectory(gs_dir)
disconnect;
setpointer(hourglass!)
//////读取文件
integer li_FileNum
boolean lb_del
ls_ml=gs_dir +"\bookmanager.db"
//拷贝文件
li_FileNum = FileCopy(ls_filename, ls_ml, true)
choose case li_FileNum
case 1
messagebox("系统提示","已经成功恢复数据库!",Exclamation!)
case -1
messagebox("系统提示","不能打开源文件,恢复失败!",Exclamation!)
case -2
messagebox("系统提示","不能写入目标文件,恢复失败!",Exclamation!)
end choose
setpointer(arrow!)
//重新连接数据库
connect ;
彷徨的龙 2003-11-08
  • 打赏
  • 举报
回复
//备份数据库,到c:\backup目录下面
string ls_backup
CreateDirectory(sle_1.text)
ls_backup="BACKUP DATABASE DIRECTORY '"+sle_1.text+"' TRANSACTION LOG RENAME"
execute immediate : ls_backup;
if sqlca.sqlcode<>0 then
messagebox("备份数据错误","请确定文件夹是否存在!"+sqlca.sqlerrtext)
else
messagebox("数据备份成功","OK,数据备份成功,放在'C:\BACKUP\'目录下")
end if
giraffe 2003-11-08
  • 打赏
  • 举报
回复
学习
lmby 2003-11-08
  • 打赏
  • 举报
回复
to daluobo(小个个) ( ) :

呵呵,我已经2年没来了,只是最近在做一个pb项目。才到这里来学习的。^_^
coolzap 2003-11-08
  • 打赏
  • 举报
回复
lmby 2003-11-07
  • 打赏
  • 举报
回复
丁 页?
加载更多回复(35)

1,081

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧