DATAWINDOW技巧2

Datawindow.net 系列二 Datawindow.Net version 2.0使用概要 1. 安装 先安装.net2005 ,框架版本2.0,然后安装DataWindow.Net 2.0组件及设计编译环境。 安装后在.net2005窗体设计时会出现Sybase DataWindow控件页签。 2. 使用 DataWindow控件可以直接在C#窗体中使用。3. 设计DataWindow 在PB或DataWindow 阅读详情

 

66、数据窗口dw_1中有一列是用下拉数据窗口表示,怎么才能动态改变下拉数据窗口,也就是动态调用不同的下拉数据窗口

datawindowchild ldwc_1
getchild("
含有dddw的字段名
", ldwc_1)
ldwc_1.dataobject = "d_1" //
这里动态改变
d_2, d_3
ldwc_1.settransobject(sqlca)
ldwc_1.retrieve()

设置下拉数据窗口的display column和data column

dw_1.Object.emp_status.dddw.name= "dw_name"
dw_1.Object.emp_status.dddw.DataColumn="col_1"
dw_1.Object.emp_status.dddw.DisplayColumn="col_2"

dw_1.object.字段名.dddw.DisplayColumn = "显示字段"
dw_1.object.
字段名.dddw.DataColumn = "data字段
"

可以用子数据窗口,getselectedrow(0)函数得到你选择的行号。

67
、在数据窗口对象画板中可以设定列的编辑风格为下拉数据窗口(DropDownDataWindow),假设所设定列为部门号"department_id",相关连的子数据窗口为"d_dddw_dep",显示列为部门名称"dept_name",数据列为部门号"dept_id",实现方法如下:

dw_1.Modify("department_id.DDDW.Name=d_dddw_dep ")
dw_1.Modify("department_id.DDDW.DisplayColumn='dept_name' ")
dw_1.Modify("department_id.DDDW.DataColumn='dept_id' ")
或:
dw_1.object.department_id.dddw.name = "d_dddw_dep"
dw_1.object.department_id.DDDW.DisplayColumn="dept_name" dw_1.object.department_id.DDDW.DataColumn = "dept_id"
注:PowerBuilder有一个小工具DWSyntax(程序名为:dwsyn60.exe),提供了获得及修改数据窗口、列等的各项属性值的语法,对编程非常有帮助。上述脚本在DWSyntax中都能找到。

68、DataWindow Processing


The type of processing required to display the data in the selected presentation style.

Controls

DataWindows

Syntax

PowerBuilder dot notation:

dw_control.Object.DataWindow.Processing

Describe argument:

"DataWindow.Processing"

Return values are:

0 — (Default) Form, group, n-up, or tabular
1 — Grid
2 — Label
3 — Graph
4 — Crosstab
5 — Composite
6 — OLE
7 — RichText

 

69、如何将DW中不同内容保存到EXCEL不同的SHEET当中?(原创)
OLEObject excelapp
excelapp = CREATE OLEObject

IF excelapp.ConnectToNewObject("excel.application") <> 0 THEN
messageBox('OLE
错误','OLE无法连接!请检查您的EXCEL是否正确安装!
')
return
END IF

excelapp.Workbooks.Add
excelapp.DisplayAlerts = FALSE

excelapp.activeworkbook.worksheets[1].cells(1,1).value = "
这是第一张
SHEET"
excelapp.activeworkbook.worksheets[2].cells(1,1).value = "
这是第二张
SHEET"


excelapp.activeworkbook.worksheets[3].cells(1,1).value = "
这是第三张
SHEET"

//
通过指定worksheets[1]中的参数1、2、3来设定到不同的sheet即可


excelapp.activeworkbook.saveas("c:/multisheet.xls",39)
excelapp.activeworkbook.close()
excelapp.quit()
excelapp.disconnectobject()

DESTROY excelapp

补充:如果想要添加一个SHEET,可以通过:

ExcelServer.Application.ActiveWorkbook.Worksheets.add() //
此处添加一个SHEET
Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=322061

70、控制哪一行可更改或不可更改

datawindow可不可以控制哪一行可更改或不可更,现在好像只能控制到列?
a.
在第一行加一個flag的欄位用來標識是否可修改,值為0或1.
然后在每一個欄位的Protected屬性中加上
:if(flag='0',0,1)
這樣,如果你認為哪一行可以修改,就將flag設為0就好了
.
b.
在datawindow的rowfocuschanged的事件当中写入,相应语句。

如下列例子实现单行不能更改,双行可以更改
int V_row,j
if dw_1.rowcount()<1 then return
v_row=dw_1.getrow()
if mod(v_row,2)=0 then
for j=1 to 5 //dw_1
有5个字段
dw_1.SetTabOrder(j,j*10)
next
else
for j=1 to 5
dw_1.settaborder(j,0)
next
end if

C.
如果你不想让用户修改某行,你可以在rowfocuschanged事件里这么写

if currentrow = 5 then
this.modify("datawindow.readonly = Yes")
else
this.modify("datawindow.readonly = No")
end if


71、数据窗口导出excle

integer li_rtn,ii,li_asc
string ls_name,ls_pathname
boolean lb_exist
if dw_1.RowCount()<1 then
MessageBox("
提示信息","请先检索数据再导出至
Excel!")
return -1//error
end if
li_rtn=GetFileSaveName("
保存文件",ls_pathname,ls_name,"xls","Excel文件
(*.xls),*.xls")
if li_rtn=1 then
lb_exist=FileExists(ls_pathname)
IF lb_exist THEN
li_rtn=MessageBox("
保存",ls_pathname+"已经存在,是否覆盖
?",Exclamation!,YesNo!)
end if
if li_rtn=1 then
//
当文件存在用户选择覆盖,或是文件本就不存在时。注意变量
li_rtn
li_rtn=dw_1.SaveAs(ls_pathname,excel5!, TRUE)
if li_rtn=1 then
//MessageBox("
提示信息","导出数据成功
!")
else
MessageBox("
错误信息","导出数据失败
!")
return -1//error
end if
else
return -1//error
end if
else
return -1
end if

72、设置下拉数据窗口不自动检索以提高检索和插入速度

在使用PB开发程序过程中你会发现,如果数据窗口或数据存储的栏位编辑风格为下拉数据窗口并且设置自动检索,首次检索数据或插入行,系统将自动检索下拉数据窗口数据,这有利于数据的显示,但会降低检索性能,特别是对于有多个栏位编辑风格为下拉数据窗口并且设置自动检索或(且)下拉数据窗口数据量较大时性能下降很明显。
其实,如果我们只关心数据值而不关心显示值,我们可以将栏位全部设置为不自动检索,你可以通过建一个没有下拉数据窗口编辑风格栏位或有下拉数据窗口编辑风格栏位但不自动检索的数据窗口对象,但一般的开发人员喜欢重用数据窗口对象,这就需要动态地改变栏位的自动检索属性。如果你已经这样做了,相对之前,性能会得到提升。
常见的做法是先将已设置自动检索的栏位取出来,然后设置不自动检索,数据窗口或数据存储检索或插入后再恢复栏位的自动检索属性,如果该数据窗口或数据存储根本无需显示数据,你可以只设置不自动检索,之后就检索或插入数据。
以下是采用常见做法,首先使用of_getautoretrievecolumnname()获取自动检索下拉数据窗口数据的栏位列表,然后调用of_setautoretrieve()设置栏位不自动检索,调用retrieve()检索数据,最后调用of_setautoretrieve()恢复栏位自动检索属性。of_getautoretrievecolumnname()、of_setautoretrieve()函数封装于n_datastore对象(继承自datastore),读者可以参考笔者所写码以通过设置下拉数据窗口不自动检索以提高检索和插入速度。

//n_datastore lds_buffer
String ls_autoretrievecolumnname_list[]

Lds_buffer.of_getautoretrievecolumnname(ls_autortrievecolumnname_list)//
取自动检索下拉数据窗口数据的栏位列表
Lds_buffer.of_setautoretrieve(ls_autoretrievecolumnname_list,false)//
设置栏位不自动检索
Lds_buffer.retrieve()
Lds_buffer.of_setautoretrieve(ls_autoretrievecolumnname_list,true)//
恢复栏位自动检索属性

/*******************************************************************
函数名称:of_getautoretrievecolumnname()
参数: as_colname_list ref string 栏位名称

返回值: long 自动检索下拉数据窗口数据的栏位个数
功能描述:取自动检索下拉数据窗口数据的栏位列表
创建人: 康剑民
创建日期:2005-12-26
版本号:
V1.0
*******************************************************************/
integer i,li_colcount,li_return=0
string ls_colname_list[]

li_colcount = integer(this.describe("datawindow.column.count"))
for i = 1 to li_colcount
if this.describe("#" + string(i) + ".dddw.autoretrieve") = "yes" then
li_return ++
ls_colname_list[li_return] = this.describe("#" + string(i) + ".name")
end if
next
as_colname_list = ls_colname_list

return li_return

/*******************************************************************
函数名称:
of_setautoretrieve()
参数: as_colname_list[] string 栏位名称列表

ab_autoretrieve boolean
是否自动检索下拉数据窗口数据
返回值: long 是否成功(1表示成功,-1表示失败)
功能描述:设置是否自动检索下拉数据窗口数据(性能优化
)
创建人: 康剑民

创建日期:2005-12-26
版本号:
V1.0
*******************************************************************/
integer i
string ls_modify,ls_error,ls_col_list[],ls_modify_colname
string ls_autoretrieve
long ll_return

if ab_autoretrieve then
ls_autoretrieve = 'yes'
else
ls_autoretrieve = 'no'
end if

for i = 1 to upperbound(as_colname_list)
if isnumber(as_colname_list[i]) then
ls_modify_colname = "#" + as_colname_list[i]
else
ls_modify_colname = as_colname_list[i]
end if
if this.describe(ls_modify_colname + ".edit.style") = 'dddw' then
ls_modify = ls_modify + "~t" + ls_modify_colname + ".edit.autoretrieve = " + ls_autoretrieve
end if
next

if lenw(ls_modify) > 0 then
ls_error = this.modify(ls_modify)
if len(ls_error) > 0 then
ll_return = -1
else
ll_return = 1
end if
else
ll_return = 1
end if
return ll_return



72、使DataWindow列只能追加不能修改
如何使DataWindow中的数据只能追加新记录而不能修改,利用 Column 的 Protect 属性可以很方便的做到这一点,方法如下:
将每一列的 Protect 属性设置为:
If( IsRowNew(), 0, 1) )
在 PowerScript 中可以动态修改 Protect 属性:
dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")
这样,DataWindow 中只有新追加的记录可修改,而其他记录是只读的。

73
、如何在DataWindow中实现列的自动折行
我们在PowerBuilder应用程序的开发过程中, 使用DataWindow时, 经常会遇
到某列的数据太长, 不能同时全部显示的情况. 若采用自动水平滚动, 操作起
来又不够简便. 下面介绍一种方法, 实现列数据多行显示, 即实现列数据的自
动折行.具体步骤如下:
1)
在DataWindow Painter中打开此
DataWindow.
2)
在需设定自动折行的列上双击鼠标, 弹开此列的属性窗口
.
3)
选择Position标签, 选中Autosize Height 多选框
.
4)
选择Edit标签, 不选中Auto Horz Scroll多选框
.
5)
单击OK按钮, 保存所做的修改
.
6)
点中Detail Band (即写有Detail的灰色长带), 单击鼠标右键, 选择

Properties...
菜单项.
7)
选中Autosize Height多选框
.
8)
单击OK按钮, 保存所做的修改
.
9)
保存此
DataWindow.
注意
:
连在一起的汉字(中间没有标点或空格分隔), 系统将认为是一个单词, 不

会自动进行折行.

74
、在数据窗口中实现动画

要实现动画,必须要有定时器,在数据窗口中已经有了一个定时器,双击数据窗口将弹出的对话框,在Timer Interval中定义大于零的值就有定时器(可以精确到毫秒),有了这个定时器就可以实现动画了。比如要改变某字段的背景颜色,可设
ackgound.color=RGB(Integer(Right(string(now(),'hhmmssf'),1))*256/10,Integer(Right(string(now(),'hhmmssf'),1))*256/10,0)
  当然,您不仅可以改变背景颜色,而且可以改变字体等等任何属性,使他可以动起来!

75
、使数据窗口中的被选中行具有更好的外观
大家都知道,在选择数据窗口中的某一行时,如果使用pb提供的选择函数SelectRow(),那么的外观真是不能恭维,单调而古板的蓝色背景,可能和您的漂亮而生动的应用程序格格不入。有没有办法改变呢?当然有啰,请听我慢慢道来。
   改变某一行的背景比较简单,改变每一列的背景属性(backgroundcolor)即可,可要根据鼠标选择情况自动改变,并可以返回被选中的行可能还需要一定的技巧。下面分单行选择和多行选择分辨说明。
单行选择
  单行选择比较简单,我们只要将所有字段的背景色的表达式改为:
if(GetRow()=CurrentRow(),RGB(255,126,0),RGB(0,0,0))
  其中第一个颜色为被选中的颜色,第二个颜色未被选中的颜色。然后用GetRow()代替GetSelectedRow()函数来得到被选中的行。
多行选择

  多行选择比较复杂,如果单纯依靠改变数据窗口的属性没法实现,我们必须使用数据窗口属性和代码结合起来才能实现
  首先,改变数据窗口的SQL语句,增加一个计算字段:0 as flag,Select 语句改为:
Select col1,col2 ,1 as flag from tablename where .....
,
  当返回数据窗口painter时,您就会发现多了一个字段flag,我们就是利用这个字段保存行被选中的信息。
  其次,修改各个字段的背景颜色属性,设置为:if(flag=1,RGB(255,126,0),RGB(255,255,255))
  第三:在数据窗口控件中,增加对clicked 事件的处理,代码如下:

if row<1 then return // setredraw(false)
if this.object.flag[row]=1 then //
如果该行被选中,撤销选择,否则选中该行
 this.Object.flag[row]=0
else
 
this.Object.flag[row]=1
end if
setredraw(true)

您还可以定制本选中行的字体,文本属性等等。原理相同,不再赘述。


76
将日期型字段初始化为当天的日期
   使用 Column Specifications 对话框来设置数据的初始值是一个比较好又比较通用的方法。 为了将日期型字段初始化为当天的日期,只要设置初始化值为today,而不是today()即可。同样设置初始值为NUll,可以使用null,而不是 null()。

77
在DataWindow中调整列顺序
在 Gird 风格的 DataWindow 中,列的排列顺序是按照你选择 Column 的顺序排列的,并且不能改变.要改变列的顺序则必须重新制作 DataWindow.
最近我发现一个办法可以改变列的顺序: 在 DataWindow 画板中打开要修改的 DataWindow,然后按 'Preview' 按钮切换到预览模式下,选择要移动的列标题并拖动到预定位置,然后返回 DataWindow 画板,存盘即可
.

78
、Retrieve时不清除原有Datawindow数据

当你调用Retrieve函数,PowerBuilder自动清除原有DataWindow然后Retrieve数据。在Datawindow RetrieveStart事件中,使用Return 2,这样PowerBuilder不会清除原有数据而是追加新数据。

79
、美化DataWindow的显示效果
使DataWindow 的单双行显示颜色不同,不仅仅可以使你的应用程序更显专业性,并使数据的可读性增强。先调出你需要改动的DataWindow,在Detail band按下右键选择Properties,选择Tab页中的Expressions,在color属性中输入下面内容:(注意是在Detail明细显示 段按右键,而不是在Column上) IF(MOD(GETROW(),2)=0,RGB(192, 192, 192), RGB(255, 255, 255)) 马上Preview一下,看一看效果如何。

80
、用Line建立漂亮的Grid DataWindow的技巧
虽然PowerBuilder有Grid风格的DataWindow,但不够灵活,如果想打印一张边框粗线条或双线,内框为细线条的表格直接使用Grid风 格的DataWindow就不能实现。因此许多人都用Tabular风格的DataWindow,然后自己用Line来实现Grid。 在调整线条位置是一个即伤脑筋又伤眼睛的事件,而一旦需要调整行高,所有工作都得重来,试一试用下面方法,会大大减轻你的工作量: 在vertical lines,改变它的属性,在Expressions Tab上,y1行上输入0,y2行上输入rowheight() - 1 在horizontal lines, 设置 y1 和 y2 = rowheight() - 5 这样PowerBuilder会自动调整线的坐标,你只需要设置横线的长度和x1,x2的坐标即可。 马上Preview一下,看一看效果! 你再也不需要因为行的高度发生改变而重新调整线条位置。

81
、如何创建一个报表,如下形式
Quantity Running Total
5,000 5,000
2,500 7,500
3,000 10,500
12,000 22,500
  对于Running Total列,我们可使用计算列:CumulativeSum(Quantity for all),即可达到逐渐递增求和的功能。

82
、数据窗口的数据送缓冲区之前确认的四个步骤 判断数据类型是否正确。如不正确则触发ItemError事件。判断数据是否符合有效性规则。如不符合有效性规则,同样触发ItemError事件。 判断是否有数据被改动。判断数据是否通过ItemChanged事件,如果数据和ItemChanged相斥,将触发ItemError事件。

83
、如何在DataWindow中用数据类型为Datetime的列为条件进行查找
  1.当要查找的日期条件是一常数时使用如下表达式:
   ls_Find = "datetime_col
    
= DateTime ('1/1/1999')"
  2.当要查找的日期条件是一个变量时使用如下的表达式:

   ls_Find = "datetime_col = DateTime ('" + ls_Date + "')"
  3.当要查找的日期条件是一个DateTime数据类型时使用如下表达式:

   ls_Find = "datetime_col = DateTime ('" + String (ldt_DateTime) + "')"

84
、设置数据窗口Boolean型属性的三种方法

  PowerBuilder提供了三种方法设置数据窗口的布尔型属性,分别是True/False, 1/0, 'Yes'/'No'。例如:
dw_1.Object.address.Visible = 0 dw_1.Object.address.Visible = False dw_1.Object.address.Visible = 'No'
  PowerBuilder在处理上以字符串的形式保存属性,而不考虑属性值是布尔型、长整型或是字符型。

为了进一步理解,可以导出一个数据窗口并查看它的原码,可以发现即使是列的颜色属性它也是使用带双引号的数字来表达。

85
、如何在DataWindow中快速删除多行
  在开发过程中可能经常有要进行多行删除的操作,一般都使用循环语句进行操作:
FOR ll_RowOn = 1 TO dw_1.RowCount() dw_1.DeleteRow(ll_RowOn) NEXT
  一个快速的删除方法是把要删除的行从主缓冲区中移到删除缓冲区中。例如,删除缓冲区中所有的行:
dw_1.RowsMove(dw_1, 1, dw_1.RowCount, Primary!, dw_1, 1, Delete!)
  不过不要忘了过滤的行在不同的缓冲区中。

86
、如何在DataWindow的SQL语法中不使用SELECT DISTINCT实现删除重复的行
  起先对你要显示唯一值的列进行排序:"city A",然后增加如下过滤字符串:" city < > city [-1] or GetRow () = 1"

87
、在数据窗口中移走行,但不是去做过滤或删除操作

  RowsDiscard()函数可做到这一点,它在数据窗口中执行移除工作,但被移走的行它不可被删除或做任何修改性的保存。

88
、如何在多行显示的DataWindow 中的Footer Band中显示当前数据的首行和最后行的行号
  我们先看两个计算列的表达式: IF (GetRow() = First(GetRow() FOR Page), 1, 0) // 1 为当前页的第一行
IF (GetRow() < > 1 AND GetRow() = Last(GetRow() FOR Page), 1, 0) // 1
为当前页的最后一行
  由上面可知,在Footer Band中设置如下计算列表达式:
'Rows ' + String(First(GetRow() FOR Page)) + ' to ' + String(Last(GetRow() FOR Page)) + ' are displayed'
。
即可达到这项功能。

89
、使可编辑的数据窗口只读
有时,你可能需要将一个用于编程的数据窗口用作显示目的,可以有以下几种方法来实现这一要求:
1.
建立两个数据窗口,一个用于编辑,一个用于显示
2.
将数据窗口中的全部对象的taborder设置为0.
3.
也可以将数据窗口中的列的protect属性设为On或Off,但你不能使用protect属性进行编辑操作

4.
数据窗口有一个将datawindow设为只读的属性(readonly),使用它最方便。

90
、数据窗口检查重复行
dw_1.SetSort ("user_id A")
dw_1.Sort()
dw_1.SetFilter ("user_id = user_id[-1]")
dw_1.Filter()
if dw_1.RowCount() > 0 then
Messagebox("
注意", "用户编码重复.")
end if
dw_1.SetFilter ("")
dw_1.Filter()

91
、如何在分组形式的DataWindow中分别显示各组的行号

----
当我们为Datawindow的每一行显示行号时,可以简单的放一个表达式为GetRow()
----
计算列。但是对于分组的Datawindow,要分别显示各组的行号,则应使用表达式为

GetRow() - First(GetRow() for Group 1) + 1
的计算列。

92
、如何能让数据窗口的某几列在其他列横拉时固定不动
////////////////////////////////////////////////////////////////
//
功能说明:用于冻结左边的滚动栏
//
变更记录: 变更或版本更新的时候
//
////////////////////////////////////////////////////////////////
int i
if pane = 1 then
i = integer(this.object.datawindow.horizontalscrollposition2)
if i < 1 or isnull(i) then return
if scrollpos > 0 then
this.object.datawindow.horizontalScrollPosition = 0
end if
else
i = integer(this.Object.DataWindow.HorizontalScrollSplit)
if i < 1 or isnull(i) then return
if i > scrollpos then
this.o b j e c t.datawindow.horizontalScrollPosition2 = i
end if
end if

93
、在数据窗口中如果要使其中一列的属性为只读,也就是不允许用户修改,那么只需简单地将这一列的Table Order 设置成0就可。然而,在有些情况下
需要对这一列的某些行修改,而某些行不能修改,这就要用到这一列的protect属性了。打开列的属性中的Expressions,在protect中输入条件判别
式。例如:允许用户修改新增加的记录,而检索出来的记录则不允许修改。条件判别式可以写成如下:
if(isRowNew(),0,1)
在 PowerScript 中可以动态修改 Protect 属性:
dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")
这样,DataWindow 中只有新追加的记录可修改,而其他记录是只读的。

94
、控制DATAWINDOW里每页显示的行数
1
、在Datawindow中增加一个计算域,起名为:ceil_page,此计算域必须放在Detail段中,
Expression
中输入 ceiling(getrow()/25) 25表示每页打印25行,也可以是一个参数。
2
、分组,选择菜单RowsCreate Group,选择ceil_page
按ceil_page分组,并选中New Page On Group Break(意思是新组开始时换页)。

3
、将此计算域设为隐藏(在属性页中的expression页中在visible属性中写0)。
4
、补空行:
在窗口的open事件中写如下代码:
long li_count,li_i
li_count=dw_1.retrieve()
if mod(li_count,25)<>0 then
for li_i=1 to 25 - mod(li_count,25)
dw_1.insertrow(0)
next
end if

95
、 数据窗口的closeQuery事件:提示保存数据
dw_1.AcceptText()
IF dw_1.ModifiedCount() + dw_1.DeletedCount() > 0 THEN
CHOOSE CASE MessageBox("
操作提示","数据已经发生变化,是否保存?",Question!,YesNoCancel!,1)
CASE 1
cb_save.TriggerEvent(clicked!)
CASE 2
Return 0//
不做任何操作直接关闭窗口

CASE 3
Return 1//
不会运行Close Event,维持原来的情况
END CHOOSE
END IF

96
、Getchild函数主要被用来得到一个数据窗口的子数据窗口
该函数在两种情况下可以使用,1、取出数据窗口对象的下拉式数据窗口;
2
、取出复合风格(composite)数据窗口对象里所嵌入的子数据窗口对象。
语法:integer dwcontrol.GetChild (string name, REF DataWindowChild
dwchildvariable )

例子1 这段程序取出一个composite数据窗口对象的两个子数据窗口,并对他们进行过滤,和排序的操作。


/*dw_dy
是连接一个composite数据窗口对象的一个数据窗口控件。dw_1、dw_2分别是嵌套的数据窗口的NAME*/

String ls_filter
DataWindowChild dwc_czrw,dwc_czx//
定义子数据窗口变量

dw_dy.Settranso b j e c t(sqlca)
dw_dy.Retrieve()
dw_dy.GetChild("dw_2",dwc_czrw)
dw_dy.Getchild("dw_1",dwc_czx)
ls_filter = "czrw_bh = '"+dw_3.GetItemString(dw_3.GetRow(),"czrw_bh")+"'"//
过滤条件
dwc_czrw.SetFilter(ls_filter)
dwc_czrw.Filter()
ls_filter = "czx_rwbh = '"+dw_3.GetItemString(dw_3.GetRow(),"czrw_bh")+"'"
dwc_czx.SetSort("czx_sx A")
dwc_czx.Sort()
dwc_czx.SetFilter(ls_filter)
dwc_czx.filter()
当然也可以通过数据共享(ShareData)等方式操作子数据窗口中的数据。
访问复合数据窗口对象.方法 :dw_dy.o b j e c t.dw_1.o b j e c t.对象
例子2 下拉数据窗口动态过滤
在数据窗口dw_1的ItemFocusChanged事件中写入如下脚本:
Integer rtncode
String ls_nowFld,ls_deptid,ls_sql
DataWindowChild fld_child
rtncode = dw_1.GetChild("Unit_id",fld_child) //
获得Unit_id字段名下拉数据窗口的句柄
If rtncode = -1 Then MessageBox("
错误!", "不是下拉数据窗口!")
fld_child.SetTransObject(SQLCA) //
设置事务对象

ls_sql = Lower(fld_child.GetSQLSelect())//
获得DDDW的SQL语句
//
去除Sql 语句中的Where条件子句, 如原Sql 语句中须有Where条件子句,此处则需进行较
//
复杂的处理,应视具体情况而定。
if Pos(ls_sql, " where ")>0 then ls_sql = Left(ls_sql,Pos(ls_sql, " where "))
//
重新设置Sql 语句中的Where条件子句
ls_deptid=dw_1.Object.dept_id[GetRow()] //
取得当前dept_id选定值
ls_sql = ls_sql + " Where dept_id = '" +Trim(ls_deptid)+"'"
//
重新设置Sql 语句
fld_child.SetSQLSelect(ls_sql)
fld_child.Retrieve()//
取得满足条件的数据

97
、从数据窗口中获取数据
单条:假设我们要读取dept_id字段的第一笔数据,可以用下列方式表示∶

li_id = dw_1.o b j e c t.dept_id[1]
假设我们要读取第一行中第二个字段的数据,可以用下列方式表示∶

ls_name = dw_1.o b j e c t.DATA[1,2]
假设我们要读取dept_id字段的所有数据,可以用下列方式表示∶

li_array = dw_1.o b j e c t.dept_id.CURRENT
假设我们要读取过滤缓冲区 (filter buffer) 内dept_id字段的第一笔数据,可以用下列方式表示∶
li_id = dw_1.o b j e c t.dept_id.Filter[1]
假设我们要读取从第二笔数据的第一个字段到第三笔数据的二个字段之间的数据,表示∶
lstr_array = dw_1.o b j e c t.DATA[2,1,3,2]
假设我们要读取整个第二笔的数据,可以用下列方式表示∶

lstr_dept = dw_1.o b j e c t.DATA[2]
使用GetItemX ( )函数 x为string number等

lstr_name = dw_1.getitemstring (li_count , "emp_name") li_count
为哪一条

多条:string ls_name[ ]
ls_name = dw_ 1.o b j e c t.emp_name.current
数据的读取 一般格式∶数据窗口控件.Retrieve ( ) 返回个数 ,-1为错误

增加数据 数据窗口控件.InsertRow (行数) 参数为0加到最后
数据的删除 数据窗口控件.Deleterow (行数)
数据的过滤l 数据窗口控件.SetFilter (条件字符串
).
数据窗口控件.Filter ( ) 用法∶将主要缓冲区 (Primary Buffer) 内不符合过滤条件的数据移到过滤缓冲区
(Filter Buffer)
内。

例子:string ls_exp ls_exp = "dept_id = 100" dw_1.SetFilter (ls_exp) dw_1.Filter ( )
排序
dw_1.SetSort ("dept_id") dw_1.Sort ( )
将数据从所有的缓冲区 (Buffer) 中清除
dw_1.ReSet ( )
计算数据数目。例如∶dw_1.Rowcount ( ) 类似:
.DeletedCount ( ) .ModifiedCount ( ) .FilteredCount ( )
数据窗口的滚动 数据窗口控件.ScrollToRow (行数
)

98
、数据窗口属性改变:

描述数据窗口对象本身颜色,可以表示如下∶long ll_color ll_color = dw_emplist.Describe ("DataWindow.Color")
描述数据窗口对象内标题 dept_id_t 的颜色,可以表示如下∶
long ll_color ll_color = dw_emplist.Describe ("dept_id_t.Color")
修改数据窗口对象本身颜色,可以表示如下
:dw_emplist.Modify ("DataWindow.Color = 255")
修改数据窗口对象内标题 dept_id 的颜色,可以表示如下∶
dw_emplist.Modify ("dept_id_t.Color = 255")
假设当我们希望在程序运行阶段才给予下行条件∶薪水超过 50000 时显示红色,低于 50000 时显示黑色。程序的写法如下∶

ls_modstring = "Salary.Color = '0~tIf (Salary > 50000
,255,0) '"
dw_1.modify (ls_modstring)

99
、得到当前鼠标所指对象所在的带区

string str_band
str_band=GetBandAtPointer() //
得到当前鼠标所指对象所在的带区
str_band=left(str_band,(pos(str_band,'~t') - 1))//
得到"header"、"detail"等
if str_band<>'header' then return //
单击非头区,退出
100
、得到鼠标指向的列对象名
str_object=GetObjectAtPointer() //
得到当前鼠标所指对象名
str_object=left(str_object,(pos(str_o b j e c t,'~t') - 1))
//
得到列对象名(默认为列名_t为列标题)
str_column=left(str_object,(len(str_title) - 2))
//
判断该名称是否为列名字

if this.describe(str_column+".band")='!' then return //
非是列名,即列标题不是按正常规律起名的。

100
、得到当前行、列,总行、列 //this 针对数据窗口而言
li_col = this.GetColumn()
li_ColCount = long(describe(this,"datawindow.column.count"))
ll_row = this.GetRow()
ll_RowCount = this.RowCount()
//
设置当前行、列

this.SetFocus()
scrolltorow(this,ll_Row)
setrow(this,ll_Row)
setcolumn(this,li_col)

101
、得到所有列标题

ll_colnum = Long(dw_1.object.datawindow.column.count)
for i = 1 to ll_colnum
//
得到标题头的名字
ls_colname = dw_1.describe('#' + string(i) + ".name") + "_t"
ls_value = dw_1.describe(ls_colname + ".text")
next

102
、如何用代码取得数据窗口汇总带计算列的值?  
String ls_value
ls_value = dw_1.Describe("Evaluate("'compute_1',1)")
如果是数值型,要转换。

103
、取得单击的列标题、列名、数据库字段名
string ls_dwo
long ll_pos
string ls_type
string ls_title
string ls_column
string ls_dbname
if Not KeyDown(KeyControl!) then return
ls_dwo = dwo.Name
if trim(ls_dwo) = '' or isnull(ls_dwo) then return
ls_type = This.describe(ls_dwo + '.type')
if ls_type = 'column' then
ls_title = This.describe(ls_dwo + '_t.text')//
标题
ls_column = This.describe(ls_dwo + '.Name') //
数据窗口列名
ls_dbname = This.describe(ls_dwo + '.dbname') //
数据库中字段名
messagebox('
信息', '标题文本:' + ls_title + &'~r~n数据窗口列名 :' + ls_column + &
'~r~n
数据库中字段名:
' + ls_dbname )
end if

104
、窗口为w_gcde内,放入一个DW_1,如何得到dw_1内的某列值yuonghu_id列的内容

方法:
long lng_column_count
integer i
string str_column[] //
列名
string str_column_text[]
  //text的名字
  //得到数据窗口的总列数
  lng_column_count = long(dw_1.Describe("DataWindow.Column.Count"))
  //循环依次读取

  for i = 1 to lng_column_count
  str_column[i] = dw_1.Describe("#"+string(i)+
".name")
   str_column_text[i] = dw_1.Describe(str_column[i] +
"_t.text")
  
next

105
、在DDDW中实现当前高亮行随鼠标移动

DataWindowChild ldwc_Child
String ls_Pointer
Long ll_Row

GetChild( "dept_id", ldwc_Child ) // Replace the column name "dept_id" as you needed

IF hwndchild = Handle( ldwc_child ) THEN
if not ificationcode = 2311 then //DDDW
的mousemove事件
//
得到鼠标所在行
ls_Pointer = ldwc_Child.GetObjectAtPointer()
ll_Row=Long( Mid( ls_Pointer, Pos( ls_Pointer, "~t" ) + 1 ))
//
移到鼠标所在行
IF ldwc_Child.GetRow() <> ll_Row AND ll_Row > 0 THEN
ldwc_Child.ScrollToRow( ll_Row )
END IF
end if
END IF

106
、实现打印完一个DataWindow后不换页
首先将datawindow的print输出到一个打印文件中,把其他的print也输入这个prn,然后,打印这个打印文件就行了。
如:
datawindow_control1.object.datawindow.print.filename="c:printfilepathexam_1.prn"
datawindow_control2.object.datawindow.print.filename="c:printfilepathexam_1.prn"
dw_1.print()
dw_2.print()
run("print //d:/printservenamesharename "c:printfilepathexam_1.prn")
//d:/printservenamesharename
打印机名



107
、除了循环以外,有没有更好的方法统计数据窗口中处于选中状态的行数?
一般习惯于使用循环来统计数据窗口中处于选中状态的行数,有没有更好的方法?

其实此问题在应用上用处不大,讨论一下,活跃一下思维还是有好处的。

方法一:

long ll_Selected
ll_Selected = long(dw_1.describe("evaluate('sum( if(IsSelected(), 1, 0) for all)',1)"))
方法二:

long ll_Selected
ll_Selected = long(dw_1.describe("evaluate('count(IsSelected() for all)',1)"))
方法三:

upperbound(dw_1.Object.Data.Selected)
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
108
如何在数据窗中得到自动高的列的高度?

答:desceibe("evaluate('RowHeight()',3)") //获得第三行的row的高度

Datawindow.net 系列一 最近接触到Datawindows.net,简单介绍一下什么是Datawindow.net? 参考:http://www.it.com.cn/f/edu/0410/12/33896.htmSybase近日宣布推出适用于任何.NET环境的功能强大的新型开发工具DataWindow.NET,该项技术简化并加快了包括富客户和智能客户在内的数据驱动企业级应用。Sybase DataWindow.NE 阅读详情

相关推荐

Datawindow.net 系列四

本题旨在解决Datawindow.net 系列一 中提到的,vs2.0 web 应用程序,不支持datawindow.net 2.0的问题,解决方法如下:解决方案资源管理器/引用,右击,添加引用/浏览, 选择如下四个文件:Sybase.PowerBuilder.Db.dllWebDataWindow.dllDataWindow.dllDataWindowInterop.dll

IT 4828

pb中DataWindowChild的基本用法

if dw_1.retrieve()>0 then if not isnull(dw_1.getitemnumber(1,'MANUFACTURER')) then datawindowchild d_child dw_1.getchild('sbbm',d_child) d_child.setFILTER("MANUFACTURER='"+string(dw_1.getitemnumbe

yudehui的专栏 9596

自定义pb数据窗口线条颜色

pb9源码,自定义pb数据窗口线条颜色,包括grid样式数据窗口,绘制边框等,另还提供了一个提取机器码的函数

PB 数据窗口,使用datawindowchild的一些代码

//1-定义一个全局的dwc datawindowchild idw_doctor //2-窗口open中初始化dwc dw_oper_bill_item.getchild('doctor',idw_doctor) idw_doctor.settransobject(sqlca) idw_doctor.retrieve() //3-dw的editchanged事件中写 if row &lt...

小树苗不知道 2291

pb数据窗口美化(grid线条颜色/字体垂直居中)

pb数据窗口美化,pb12.5源码,数据窗口字体垂直居中,自定义grid类型线条颜色

process插件_利用SPSS 插件MLmed检验多水平中介的调节模型

本文介绍一个SPSS插件,用于检验多水平中介的调节,及该方法与Mplus的比较。1 Mlmed 简介及安装Mlmed 简介: Mlmed 由Rockwood 2017年开发,基于SPSS插件计算Multilevel moderated mediation. 可以提供multilevel mediation Monte Carlo 置信区间比如(模拟20000次),以及多水平调节的...

weixin_39976081的博客 5769

技巧(2)- 如何在程序运行时,将datawindow中的text控件字体设为粗体?

如何在程序运行时,将datawindow中的text控件字体设为粗体?datawindow.object.t_name.font.weight=700//700粗体,400正常字体dw_1.modify("t_name.font.weight=700");   //bold:700,normal:400datawindow.object.t_name.font.weight=700便是

Rambo的博客 1313

ROS2中间件选型指南:FastDDS与CycloneDDS零拷贝机制对比与实战

在机器人开发中,通信中间件是连接分布式节点的核心纽带,其性能直接影响系统的实时性与可靠性。DDS作为ROS2默认的通信标准,通过发布订阅模型和QoS策略,为高频大带宽场景提供了灵活的数据分发能力。并行计算与高性能传输的需求,推动了零拷贝技术的演进——从传统序列化到共享内存乃至指针传递,旨在减少数据复制开销、降低延迟。在激光雷达点云、相机图像等场景下,中间件的选型尤为关键。FastDDS凭借与ROS2的深度集成和丰富文档成为入门首选,而CycloneDDS在低延迟和资源占用上表现更优,借助iceoryx实现了

weixin_28726391的博客 251

PB DataWindow 技巧

PB DataWindow 技巧 1 使DataWindow列只能追加不能修改如何使DataWindow中的数据只能追加新记录而不能修改,利用 Column 的 Protect 属性可以很方便的做到这一点,方法如下:将每一列的 Protect 属性设置为:If( IsRowNew(), 0, 1) )在 PowerScript 中可以动态修改 Protect 属性:dw_1.M

cyh_0769的专栏 1432

基于模型上下文协议(MCP)的可插拔式临床AI工具链Clinical DS研究(下)

本研究深入探讨了医疗AI在临床落地中的核心矛盾,即如何从“模型能答”迈向“系统可信、可用、可追溯”。为解决此矛盾,我们创新性地提出并详细设计实现了一套基于模型上下文协议(MCP)的**“可插拔式临床AI工具链”**架构。通过将复杂的医疗AI系统解构为Host、MCP Server和标准协议三层,并将各类能力(临床决策、影像分析、合规审计)封装为标准的、可独立演进的Server,我们成功地构建了一个模块化、高内聚、低耦合的系统。

AllenLV的博客 1380

【自动驾驶轨迹规划之hybrid A*算法】

本文参考论文:https://ai.stanford.edu/~ddolgov/papers/dolgov_gpp_stair08.pdf 这篇文章是基于经典A*算法与reeds-shepp曲线的,不清楚的读者请参考【自动驾驶轨迹规划5之A*算法】_无意2121的博客-优快云博客【自动驾驶轨迹规划之dubins曲线与reeds-shepp曲线】_无意2121的博客-优快云博客 目录 1 hybrid A* 算法创新点 1.1 搜索方式 1.2 车辆运动学模型 1.3 reeds-shepp曲

weixin_65089713的博客 1万+

pb datawindow 技巧

 使DataWindow列只能追加不能修改 如何使DataWindow中的数据只能追加新记录而不能修改,利用 Column 的 Protect 属性可以很方便的做到这一点,方法如下:将每一列的 Protect 属性设置为:If( IsRowNew(), 0, 1) ) 在 PowerScript 中可以动态修改 Protect 属性:dw_1.Modify("column_name_here.Pr

思考梦想生活在流淌 8683

嵌入式AI实战:基于RK3588部署YOLOv11并集成OpenCV实现实时推理(全流程详解)

本文详细介绍了在RK3588芯片上部署YOLOv11目标检测模型的全流程,包括环境搭建、模型转换和实时推理实现。主要内容为:1)通过YOLOv11官方工具将PyTorch模型转为ONNX格式;2)使用RKNN Toolkit2将ONNX模型转换为适配RK3588的RKNN格式;3)在RK3588上结合OpenCV实现实时视频推理功能。教程提供了完整的代码示例和详细步骤说明,帮助开发者快速在边缘设备上部署目标检测模型,实现AI视觉应用的落地。

LXY_LOVE36的博客 213

PB中datawindow常用技巧

1、如何让存储文件目录的列,显示图片?答:选择对应的column的display as picture属性为true2、如何复制grid类型的所选择的行的数据到系统剪切板?答:string ls_selectedls_selected=dw_1.Object.DataWindow.Selected.Dataclipbord(ls_selected)4、如何设置的DW底色?

老熊专栏 3544

AgentScope Java 入门:Spring AI Alibaba 与 AgentScope 的定位与区别

摘要:Spring AI Alibaba是阿里基于Spring AI开发的本地化AI应用框架,旨在服务Java开发者。它提供模型接入、函数调用、RAG等功能,并与阿里云基础设施深度集成。同时,阿里开源了多智能体框架AgentScope,其Java版(AgentScope-Java)专注于Agentic设计理念。两者将协同发展:Spring AI Alibaba侧重Spring生态集成,AgentScope-Java强化智能体能力。未来计划包括支持AgentScope、升级Admin平台,以及推进Server

SmartSi 1532

高云FPGA系列教程(8):ARM串口数据接收(中断和轮询方式)

GW1NSR-4C ARM部分共有2个串口外设,都挂载在APB1总线上,最高支持波特率921.6Kbit/s,无奇偶校验位,8位数据位,1位停止位,支持高速测试模式 HSTM(High Speed Test Mode),即每个时钟周期输出1位数据,可以在短时间内传输大量数据。官方手册上没有描述发送和接收缓存FIFO的深度,所以不确定是否支持缓存。

whik1194的博客 1684

datawindow常用技巧

1、如何让存储文件目录的列,显示图片?答:选择对应的column的display as picture属性为true2、如何复制grid类型的所选择的行的数据到系统剪切板?答:string ls_selectedls_selected=dw_1.Object.DataWindow.Selected.Dataclipbord(ls_selected)4、如何设置的DW底色?

zlnlh的专栏 939

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

PB DataWindow 技巧大全

 摘自 http://blog.youkuaiyun.com/yxf006/archive/2006/07/28/992237.aspx 为了方便阅读,大致整理了一下,希望以后能添加更多的进来。未经一一验证,不保证完全好用 ;) 不过大部分应该没有问题,因为很多都是最基本的技巧。1 使DataWindow列只能追加不能修改 如何使DataWindow中的数据只能追加新记录而不能修改,利用 Column

qingsongzizai的专栏 1130

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

PB的DataWindow的38个技巧(转)

1 使DataWindow列只能追加不能修改 如何使DataWindow中的数据只能追加新记录而不能修改,利用 Column 的 Protect 属性可以很方便的做到这一点,方法如下: 将每一列的 Protect 属性设置为: If( IsRowNew(), 0, 1) ) 在 PowerScript 中可以动态修改 Protect 属性: dw_1.Modify("column_name......

chengg0769 平淡无奇见真知 独立博客: http://blog.mis2erp.com 3825

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

PowerBuilder DataWindow 38个开发技巧

PowerBuilder DataWindow 38个开发技巧 1 使DataWindow列只能追加不能修改如何使DataWindow中的数据只能追加新记录而不能修改,利用 Column 的 Protect 属性可以很方便的做到这一点,方法如下:将每一列的 Protect 属性设置为:If( IsRowNew(), 0, 1) )在 PowerScript中可以动态修改Protect 属性:dw_...

巴里大叔的博客 3359

Datawindow 38个技巧

1 使DataWindow列只能追加不能修改 如何使DataWindow中的数据只能追加新记录而不能修改,利用 Column 的 Protect 属性可以很方便的做到这一点,方法如下: 将每一列的 Protect 属性设置为: If( IsRowNew(), 0, 1) ) 在 PowerScript 中可以动态修改 Protect 属性: dw_1.Modify("column_name_her

斌的专栏 2083

datawindow的技巧

网上看了很多datawindow的技巧,找了很多的例子,发现网友总结的很全。把这些技巧放在这里供大家参考 1、如何复制graph风格的datawindow中的图形到剪切板? 答:dw_1.clipbord("gr_1") 2、如何使用datawindow的查询模式? 答:dw_1.Object.DataWindow.QueryMode='yes'将datawindow改变为

lztqy的博客 1669
上一篇: SQL常用命令
下一篇: SQL跨服务器查询
web_ser
博客等级 码龄17年 7粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值