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
#2
1.数据窗口自动折行?
detail 带选autosize height
column去掉auto horz scroll选auto vert scroll
2.如何动态地把一个数据窗口里的字段设为只读
dw_name.object.column.protect = 1
dw_name.object.column.edit.displayonly = 'yes'
dw_name.object.column.teasequence = 0
3.如何实现跨数据库的分布式查询或更新?
//与对方建立连接
string ls_link, ls_login
ls_link = "sp_addlinkedserver ~'srv_lnk~',~'~',~'SQLOLEDB~',~'sws~'"
ls_login = "sp_addlinkedsrvlogin ~'srv_lnk~',~'false~',null,~'sa~',~'newworld~'"
sqlca.autocommit = true
EXECUTE IMMEDIATE :ls_link;
EXECUTE IMMEDIATE :ls_login;
//这里要注意修改ANSI_NULLS和ANSI_WARNINGS。因为在做分布式查询时应将它么都设置为ON。而企业管理中的ANSI_NULLS和ANSI_WARNINGS选项不对,但没有方法改动。在查询分析器可以设置ANSI_NULLS和ANSI_WARNINGS选项,而且默认值是对的。所以创建一个存储过程,
create proc 名 as SET ANSI_NULL_DFLT_ON on --注意 SET ANSI_WARNINGS on
declare procedure up_set for your_proc.....//在pb中掉用创建的着个存储过程
//做数据操作
insert into tableOfAnotherDB values('19','uuu','dd');
//关闭连接
string ls_drop
ls_drop = "sp_dropserver ~'srv_lnk~', ~'droplogins~'"
EXECUTE IMMEDIATE :ls_drop;
sqlca.autocommit = false
4.如何用pb实现读写图片操作?
//图片字段image
string docname, named
integer value,li_f,i
integer li_fileptr,li_loops
long ll_filelen,ll_bytes_read
Blob lbb_Read,lbb_Total
value = GetFileOpenName("选择图形文件", + docname, named, "BMP", + "Bmp Files (*.BMP),*.BMP," + "Jpeg Files (*.JPG),*.JPG")
IF value = 1 THEN
//打开图像文件
ll_filelen = FileLength(docname) //获取文件长度, 必须在打开之前
li_fileptr = FileOpen(docname,STREAMMODE!,READ!,LOCKREAD!)
If li_fileptr = -1 Then
Beep(2)
MessageBox("错误","图形文件打开错误!")
Return
End If
If ll_filelen > 32765 Then //一次只能读32K
If Mod(ll_filelen, 32765) = 0 Then
li_loops = ll_filelen / 32765
Else
li_loops = (ll_filelen / 32765) + 1
End If
Else
li_loops = 1
End If
//循环读取图片文件
For i = 1 to li_loops
ll_bytes_read = FileRead(li_fileptr,lbb_Read)
lbb_Total = lbb_Total + lbb_Read
Next
FileClose(li_fileptr)
SetPicture(p_1,lbb_Total)
UPDATEBLOB table set column=:lbb_total where clause;
end if
//显示图片
blob lbb_blob
selectblob column into :lbb_blob from table wher clause;
setpicture( p_1,blob )
5.有像winamp中让用户选择目录的函数吗?
getfileopenname()
getfilesavename()
dirlist()
#3
在设计数据窗口报表时,由于将某字段的宽度固定了,因而有部份数据不能显示完全,因而想实现自动换行,同时为了节省纸张空间又要求该字段的高度也是自动的,不知各位大侠有什么高招?(请注意中英文似乎有一定的区别,现需要两者皆可实现)
---------------------------------------------------------------
将数据窗口中相应列的auto horz scroll 为不选中,选中autosize height
将detail的autosize height选中。在数据窗口retrieve 后调用下面函数即可
uf_set_text(datawindow adw_content,string
as_columns,boolean,ab_ignoreblank)
/*************************************************************
describe: 在数据窗口adw_content中,在as_columns中包含的列中插入空格
args:
as_columns 要操作的多个列,列间用逗号隔开
*************************************************************/
if (not isvalid(adw_content)) or isnull(as_columns) or len(as_columns)<1 or isnull(ab_ignoreblank) then return -1
n_cst_string lnv_string
string ls_column[] , ls_width ,as_source,as_replaced ,ls_temp
int li_upperbound , li_width , li_column , li_fontWidth, li_counter
long ll_rowcount , ll_row , ll_totalstep
int li_yield
lnv_string.of_parsetoarray(as_columns,',',ls_column)
li_upperbound = upperbound(ls_column)
ll_rowcount = adw_content.rowcount()
if li_upperbound<1 or ll_rowcount<1 then return -1
openwithparm(w_waiting,this)
ib_cancel = false
iw_frame.enabled = false
ll_totalstep = ll_rowcount * li_upperbound
w_waiting.uf_register(ll_totalstep)
for li_column = 1 to li_upperbound
ls_width = adw_content.describe(ls_column[li_column]+".width")
li_width = integer(ls_width)
if ls_width='!' or ls_width='?' or li_width=0 then
continue
end if
//ls_temp = adw_content.describe(ls_column[li_column]+".Font.property { = 'width' }")
//messagebox(ls_column[li_column]+".Font.property { = 'width' }",ls_temp)
//return 1
li_fontwidth = 27
li_counter = li_width / li_fontWidth
for ll_row=1 to ll_rowcount
if ib_cancel then
iw_frame.enabled = true
return 0 //pressed cancel button
end if
as_source = adw_content.getitemstring(ll_row,ls_column[li_column])
as_replaced = uf_insertstring(as_source,li_counter,' ',false)
if as_replaced<>as_source then
adw_content.setitem(ll_row,ls_column[li_column],as_replaced)
end if
w_waiting.uf_stepit()
next
next
close(w_waiting)
iw_frame.enabled = true
return 1
#4
在数据窗口中如何使光标所在单元格改变颜色?
我想判断当前光标所在列号,由此使光标所在“单元格”背景色变化一下。
(注意:在datawindow的itemfocuschanged事件中可以用
dw_1.modify(dwo.background.color=\"颜色值\")改变。但是它改变
的是整个列的颜色。现在我要的是使光标所在的单元格改变颜色。)
我所要的是:
1, 光标在某行某列的单元格上时是一种颜色,光标离开此单元格,比如光标移动到左边或右边一列时,原来的单元格恢复本来颜色,而被移动到的一列单元格颜色又改变(注意:此时光标在同一行)
2, 当光标移动到下一行时,同一列之间只能是光表所在单元格变色,其他上下单元格保持原样
---------------------------------------------------------------
在DW的ITEMFOCUSCHANGED事件,注意是ITEMFOCUSCHANGED事件:
//此处声明所用到的相关变量;
Long ll_col,ll_pos,ll_cols
String modstring,ls_colnam,ls_color_1,ls_color_2
//此处给两个颜色变量赋值;
ls_color_1 = String(RGB(0, 255, 0))
ls_color_2 = String(RGB(255,0,0))
//此处获取当前列号和总列数;
ll_col = dw_1.GetColumn()
ll_cols = Long(dw_1.Object.DataWindow.Column.Count)
//此处将所有列的BACKGROUND的MODE属性设为不透明;(注:下面两句其实可以放到FORM的OPEN事件或DW的CONSTRUCTOR里面执行,可以提高效率;)
FOR ll_pos = 1 TO ll_cols
ls_colnam = dw_1.Describe("#"+String(ll_pos)+".Name")
dw_1.Modify(ls_colnam+".Background.Mode='0'")
NEXT
//此处将所操作列的Background.Color属性设为带IF判断的表达式,而除此之外的各列的背景表达式均设为恒值;
FOR ll_pos = 1 TO ll_cols
ls_colnam = dw_1.Describe("#"+String(ll_pos)+".Name")
IF ll_pos <> ll_col THEN
modstring = ls_colnam+".Background.Color='"+ls_color_1+"'"
ELSE
modstring = ls_colnam+".Background.Color='"+ls_color_1+" ~t if (getrow()=currentrow(),"+ls_color_2+","+ls_color_1+")'"
END IF
//此处执行背景颜色修改;
dw_1.Modify(modstring)
//刷新显示新的背景颜色;
dw_1.SetRedraw(TRUE)
NEXT