PB基本...

 

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

  

最后的运行效果是当前ITEM为红色,其他均为绿色。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值