[Window]
1.获取DataWindow Detail区高度
String ls_height
ls_height = dw_1.Object.DataWindow.Detail.Height
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()
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( 参数 )
3.事件间传递参数
Object.Trigger Event ue_name( 参数 )
Object.Post Event ue_name( 参数 )
---------------------
4.标签换行
~r~n
4.标签换行
~r~n
---------------------
5.Open/Close 淡入淡出效果(Win2000/XP)
function boolean AnimateWindow ( long hwnd, long dwtime, long dwflags ) library "user32"
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)
//淡入淡出效果
AnimateWindow (Handle ( This ) , 400, 524288+ 65536 + 16)
==========================================================
[DataWindow]
[DataWindow]
1.获取当前项目的值
dw_object.GetText() = ""
dw_object.GetItemString(1,"ddw_gjmc") = Null
dw_object.GetText() = ""
dw_object.GetItemString(1,"ddw_gjmc") = Null
---------------------
2.即时获取DataWindow中正在编辑的项目的值
editchanged()
data
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
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
/*项目有效性检查(对应数据窗口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
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)
dw_cpq.GetChild("cpqbh",dwc_cpq)
ls_row = String(dwc_cpq.GetRow())
dwc_cpq.Describe ("Evaluate('LookupDisplay(cpqmc)',"+ls_row+")")
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)
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)
This.Modify("Destroy p_" + is_dwoname)
---------------------
6.获取Sort
ls_sort = dw_2.Describe("Datawindow.Table.sort")
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"))
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
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)
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))
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)
9.水平滚动条 〉最右
smax = dw_1.Describe("DataWindow.VerticalScrollMaximum")
dw_1.modify("DataWindow.VerticalScrollPosition=" + smax)
---------------------
10.获取加亮显示的行
dw_1.GetSelectedRow(0)
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') "
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行数
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
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()
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")
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
datawindowchild ldc_new
string ls_str
dw_1.getchild('name',ldc_new)
ls_str="displaycolumnname like '%文%'"
ldc_new.setfilter(ls_str)
ldc_new.filter()
ls_str="displaycolumnname like '%文%'"
ldc_new.setfilter(ls_str)
ldc_new.filter()
========================================================
[SQL]
[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不会自动提交事务。
如果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 ;
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 ;
//往下拉框添加值
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 ) )
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;
3.SELECT 字段赋默认值:
SELECT nvl(Column,'0') FROM Table;
--------------------
4.SQLCA.sqlnrows
SQL操作的记录数
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
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) //用图像控件显示图像
要查看员工的照片或工作经历,就应把相关信息从数据库中读出来。主要代码如下:
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;
6.SELECT to_char(SYSDATE,'YYYYMMDD HH24:MI') INTO :ls_date FROM DUAL;
--------------------
--------------------
========================================================
[Oracle]
[Oracle]
1.return(SQL%rowcount);
SQL操作的记录数
SQL操作的记录数
========================================================
[PB - Excel]
[PB - Excel]
1.PB - Excel
Long Ll_NumCols,Ll_NumRows,Ll_C,Ll_R
OLEObject xlApp , xlSub
Integer li_ret = 0
Long Ll_NumCols,Ll_NumRows,Ll_C,Ll_R
OLEObject xlApp , xlSub
Integer li_ret = 0
// 创建OLE对象
xlApp = CREATE OLEObject
xlApp = CREATE OLEObject
// 连接Excel
Li_Ret = xlApp.ConnectToNewObject( "Excel.Sheet" )
IF Li_Ret < 0 THEN
MessageBox("系统提示!","连接Excel出错!")
RETURN
END IF
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.'
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
// 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
DESTROY xlApp
---------------------
---------------------
---------------------
---------------------
---------------------
========================================================
[Function]
[Function]
1.日期相减:
DaysAfter( date1,date2 )
DaysAfter(1996-12-20, 1996-12-24) = 4
DaysAfter(1996-12-24, 1996-12-20) = -4
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)
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
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
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