常用代码

[Window]
1.获取DataWindow Detail区高度
String ls_height
ls_height = dw_1.Object.DataWindow.Detail.Height
---------------------
2.调用其它事件:
PostEvent(Parent,"ue_open")
TriggerEvent(Parent,"ue_event")
This.pb_gxyl.Event Clicked()
---------------------
3.事件间传递参数
Object.Trigger Event ue_name( 参数 )
Object.Post Event ue_name( 参数 )
---------------------
4.标签换行
~r~n
---------------------
5.Open/Close 淡入淡出效果(Win2000/XP)
function  boolean  AnimateWindow  (  long  hwnd,  long  dwtime,  long  dwflags  )  library  "user32"
Window.close()事件中
//淡入淡出效果
AnimateWindow (Handle ( This )  ,  400,  524288+  65536  +  16)
 
 
 
==========================================================
[DataWindow]
1.获取当前项目的值
dw_object.GetText() = ""
dw_object.GetItemString(1,"ddw_gjmc") = Null
---------------------
2.即时获取DataWindow中正在编辑的项目的值
editchanged()
data

DataWindow中字段条件:
 isNull( gettext() ) or ( isNumber( gettext() ) and real( gettext() ) >= 0 and real( gettext() ) <= 9999999.9999 )
dw_object.itemerror():
String ls_dwo  = ""  //dwo.Name
ls_dwo = dwo.Name
/*项目有效性检查(对应数据窗口dw_hdjsd中的项目错误表达式)*/
//Msg("M061I:请输入数值型数据!")
If IsNumber(data) = FALSE Then
 f_fmwshowmsg("M061I")
 This.SelectText(1, Len(This.GetText()))
 Return 1
End If
//Msg("M010I:输入的数值应 >= 0 ")
If Real(data) < 0 Then
 f_fmwshowmsg("M010I")
 This.SelectText(1, Len(This.GetText()))
 Return 1
End If
//Msg("M026I:输入的数值超出定义的长度,请重新输入!")
If Double(data) > 9999999.9999 Then
 f_fmwshowmsg("M026I")
 This.SelectText(1, Len(This.GetText()))
 Return 1
End If

---------------------
3.dberror()
//0-显示错误信息; 1-不显示错误信息.
Return 1
---------------------
4.获取数据窗口中嵌套的子数据窗口dropdowndw的displaycolumn值
dw_1.Describe ( "Evaluate('LookupDisplay(ColumnName 编号列)','+子数据窗口RowNumber+')" )
事件:dw_object.itemchanged()
无效事件:window.open()
例:
String ls_row
DataWindowChild dwc_cpq
dw_cpq.GetChild("cpqbh",dwc_cpq)
ls_row = String(dwc_cpq.GetRow())
dwc_cpq.Describe ("Evaluate('LookupDisplay(cpqmc)',"+ls_row+")")
---------------------
5.DW中动态创建Picture(排序标志)
ls_Picture = ls_curdir + "orderup.bmp"
li_PictPos = Integer(This.Describe(ls_curobj + ".X")) + (Integer(This.Describe(ls_curobj + ".Width")) - 70)
ls_AddPict = 'Create bitmap(band=foreground filename="' + ls_Picture + '" ' + &
  ' x="' + String(li_PictPos) + "~tInteger(describe('" + ls_curobj + &
  ".X')) + (Integer(describe('" + ls_curobj + ".Width'))" + ' - 70)" y="24" ' + &
  ' height="33" width="51" border="0" name=p_' + ls_curobj + ' visible="1")'
This.Modify(ls_AddPict)
//清除Picture
This.Modify("Destroy p_" + is_dwoname)
---------------------
6.获取Sort
ls_sort = dw_2.Describe("Datawindow.Table.sort")
---------------------
7.修改DW中字段的背景颜色
If dw_order.Modify("ColumnName.BackGround.Color = 67108864") = "" Then
 MessageBox("BackGroundColor","OK")
End If
MessageBox("Color",dw_order.Describe("ypblzzgh.BackGround.Color"))
//dw_1.Object.oval_1.Background.Color = RGB(255, 0, 128)
color1 = 255    //red
color2 = 16711680   //blue
color3 = 65280    //green
default_color = 16777215 //white
dw_1.Object.DataWindow.Color = 67108864
//Use RGB to obtain the long value
 Red + (256 * Green) + (65536 * Blue)

---------------------
8.<Computed Columns>
"M_GGJC"."GH" || '*' || "M_GGJC"."DD_BH" || '*' || "M_GGJC"."XD" AS 塑料袋尺寸
Column1 + Column2的上一行值:Column1 + Column2[-1]
('+' ||nvl("M_GGJC"."NJ_MAXYC",'0')||' '||'-'||nvl("M_GGJC"."NJ_MINYC",'0'))  as NJYC

  -----
<Computed Fields>
If ( isNull( String(tpcd) ), If (isNull( String(tpkd) ), If (isNull( String(tpgd) ), ' * * ' , ' * * '+String(tpgd) ), If ( isNull( String(tpgd) ),  ' * '+String(tpkd)+' * ' , ' * '+String(tpkd)+' * '+String(tpgd) )), If (isNull( String(tpkd) ), If (isNull( String(tpgd) ), String(tpcd)+' * * ' , String(tpcd)+' * * '+String(tpgd) ), If (isNull( String(tpgd) ),  String(tpcd)+' * '+String(tpkd)+' * ' , String(tpcd)+' * '+String(tpkd)+' * '+String(tpgd) )))
Char()转换为Date():
date(mid(rkrq_klbc,1,4)+'/'+mid(rkrq_klbc,5,2)+'/'+mid(rkrq_klbc,7,2))
---------------------
9.水平滚动条 〉最右
smax = dw_1.Describe("DataWindow.VerticalScrollMaximum")
dw_1.modify("DataWindow.VerticalScrollPosition=" + smax)
---------------------
10.获取加亮显示的行
dw_1.GetSelectedRow(0)
---------------------
11.dw_object.SetSQLSelect() (日期型数据比较)
 ls_ykrqmin  = "20030927"
 
 is_where= " to_date(T_SJJLRK.RKRQ_KLBC,'YYYY/MM/DD') >=  to_Date("+ls_ykrqmin+",'YYYY/MM/DD') "
  
---------------------
12.DataWindow循环删除行
Long ll_rownum = 0  //DataWindow行数
ll_rownum = dw_1.RowCount()
For i = ll_rownum To 1 Step -1
 ls_zz = dw_1.GetItemString(i,"zz")
 If ls_zz = "2" Then
  dw_1.DeleteRow(i)
 End If
Next
---------------------
13.获取dw_1的SQL
dw_1.Describe("DataWindow.Table.Select")
/
dw_1.GetSQLSelect()
---------------------
14.Composite复合DW 隐藏子DW
//Visible = True,1; False,0
dw_com.Modify("dw_1.Visible = 1")
---------------------
---------------------
---------------------
---------------------
---------------------
---------------------
---------------------
---------------------
---------------------
 
 

=========================================================
[DropDownDW]
1.实现DropDownDW下拉列动态查询
datawindowchild ldc_new
string ls_str
dw_1.getchild('name',ldc_new)
ls_str="displaycolumnname like '%文%'"
ldc_new.setfilter(ls_str)
ldc_new.filter()
 
 
 
 
 
========================================================
[SQL]
在PB中,Commit和Rollback是一个事务结束的标志,如果autocommit设成False,则PB事务必须有Commit或Rollback作为结束标志,否则会造成事务一直不结束导致数据库死锁,当程序退出时,由于已经断开数据库联结,数据锁解除,但PB中的机制是当执行Disconnect命令时自动执行Commit命令结束未结束的事务处理,所以造成的现象是虽然没有加Commit,数据依然执行成功.
如果autocommit设为true,则每个Sql语句执行完成,PB自动执行Commit命令结束事务.
两点不同意
一、当使用settrans的时候就算autocommit = false,dw一样自己控制事务的完成。
二、当数据库连接参数设为commitondisconnect = no的时候,在断开连接的时候pb不会自动提交事务。
---------------------
1.游标Cursor:
  //检索厚度计设定表
  DECLARE hdjsdzxsa CURSOR FOR 
     SELECT DISTINCT(XSA)
      FROM M_HDJSDZ;
   
  Open hdjsdzxsa;
  Fetch hdjsdzxsa INTO :ldb_xsa ;
  Do While SQLCA.SQLCode <> 100
   //往下拉框添加值
   ddlb_xzq.AddItem(String(ldb_xsa))
   Fetch hdjsdzxsa INTO :ldb_xsa ;
  Loop
  
  Close hdjsdzxsa ;
---------------------
2.DataWindow SQL:
WHERE ( "T_SCDD"."GG_BH" = "M_GGJC"."GG_BH"(+) ) and 
         ( "T_SCDD"."SHDW_DM" = "M_SHDW"."SHDW_DM" ) and 
         ( "M_GGJC"."CZ" = "M_CZ"."CZ" ) and 
         ( ( "T_SCDD"."GH" = :gh ) AND 
         ( "T_SCDD"."DD_BH" = :ddbh ) )   
--------------------
3.SELECT 字段赋默认值:
SELECT nvl(Column,'0') FROM Table;
--------------------
4.SQLCA.sqlnrows
SQL操作的记录数
--------------------
5.操纵LOB
大对象(Large OBject)通常指大文本和大二进制对象,几乎每一种数据库都支持它。在PB中可以用UpdateBlob和SelectBlob语句来对它们进行处理。
  (1)用UpdateBlob来把大对象数据写入数据库
  在编写管理软件时,要求把员工的照片(Bmp文件)和工作经历(Doc文件)保存在数据库中,而不是像以前一样保存它们的文件名,可以考虑如下方法:
  fh = FileOpen(″C:/My Documents/Alexander.bmp″, StreamMode!)
  If fh 〈〉 -1 Then
  FileRead(fh, pic)
  //把图像数据读到Blob类型变量pic中
  FileClose(fh)
  UpdateBlob emp Set photo =:pic Where empno=′9925′; //把图像数据写入数据库
  If SQLCA.SQLNRows〉0 Then Commit;
  End If
  注意,FileRead一次只能读取32K,若文件大于32K应分多次读取;UpdateBlob执行成功与否不能用SQLCode或SQLDBCode来判断,而要用SQLNRows是否大于0来判断。
  (2)用SelectBlob从数据库中读取大对象数据
  要查看员工的照片或工作经历,就应把相关信息从数据库中读出来。主要代码如下:
  Blob pic //把pic定义为二进制大对象(Binary large object)
  SelectBlob photo Into :pic From emp Where empno=′9925′;//把图像数据读到变量pic中
  p_1.SetPicture(pic) //用图像控件显示图像
--------------------
6.SELECT to_char(SYSDATE,'YYYYMMDD HH24:MI') INTO :ls_date FROM DUAL;
--------------------
--------------------
 
 
========================================================
[Oracle]
1.return(SQL%rowcount);
SQL操作的记录数
 
 
 
========================================================
[PB - Excel]
1.PB - Excel
Long Ll_NumCols,Ll_NumRows,Ll_C,Ll_R
OLEObject xlApp , xlSub
Integer li_ret = 0
// 创建OLE对象
xlApp = CREATE OLEObject
// 连接Excel
Li_Ret = xlApp.ConnectToNewObject( "Excel.Sheet" )
IF Li_Ret < 0  THEN
 MessageBox("系统提示!","连接Excel出错!")
   RETURN
END IF
//FileCopy("/pbexcel/fileorigin.xls","/pbexcel/file.xls",TRUE)
xlApp.Application.Workbooks.Open(ls_path)
xlApp.Application.Visible = TRUE
xlSub = xlApp.Application.ActiveWorkbook.Worksheets[1]
xlSub.cells[1,1] = '循环编号No.'
//FOR Ll_C = 1 TO Ll_NumCols
//  FOR Ll_R = 1 TO Ll_NumRows
//        xlSub.cells[Ll_R,Ll_C] = dw_1.object.data[row,column] 
//  NEXT
//NEXT
xlApp.DisConnectObject()
DESTROY xlApp
---------------------
---------------------
---------------------
---------------------
---------------------
 
========================================================
[Function]
1.日期相减:
DaysAfter( date1,date2 )
DaysAfter(1996-12-20, 1996-12-24) = 4
DaysAfter(1996-12-24, 1996-12-20) = -4
---------------------
2.日期+Num
This statement returns 1990-02-10:
RelativeDate(1990-01-31, 10)
---------------------
3.For Halt
For i = 1 To 5000
 Yield()
 If ib_interrupt = True Then
  MessageBox("Debug","Interrupted!")
  ib_interrupt = FALSE
  EXIT
 End If
 //Process...
Next
---------------------
---------------------
---------------------
---------------------
---------------------
---------------------
---------------------
---------------------
 
 

========================================================
[Colors]
Number = red + 256*green + 256*256*blue
--------------------
Red Green Blue Number  Color
255 0 0 255  Red
0 255 0 65280  Green
255 128 0 32768  Dark Green
0 0 255 16711680 Blue
255 255 0 65535  Yellow
128 128 0 328896  Brown
0 255 255 16776960 Cyan
192 192 192 12632256 Light gray
   33554432 ButtonFace
255 255 255 16777215 White

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值