当前位置: 代码迷 >> PB >> Dw_1.filter( ); 过滤,该如何解决
  详细解决方案

Dw_1.filter( ); 过滤,该如何解决

热度:590   发布时间:2016-04-29 06:25:33.0
Dw_1.filter( ); 过滤
dw_1内容如下(数据来源Excel导入)
名称, 性别, 民族
张三, 男, 汉族
李四, 女, 苗族
王五, 男, 傣族
赵六, 男, 汉
田七, 女, 汉民
孙八, 男, 苗族

现在【想实现】点击窗口上面的 匹配 按钮弹出窗口
dw_mate数据如下(上面的民族数据去重复)
excel数据, 标准数据
汉族, 【下拉选择】
苗族,【下拉选择】
傣族,【下拉选择】
汉,【下拉选择】
汉民,【下拉选择】

初学没资料,如有空闲大神, 还请指点
------解决方案--------------------
最笨的方法

循环dw_1,判断数据分类,插入不同的下拉框


long i , ll_cout

ll_count = dw_1.rowcount()
for i=1 to ll_count
choose case dw_1.getitemstring(i,'民族')
case '汉族'
ddlb_1.additem(dw_1.getitemstring(i,'名称')
case '苗族'
ddlb_2.additem(dw_1.getitemstring(i,'名称')
case '傣族'
ddlb_3.additem(dw_1.getitemstring(i,'名称')
case '汉'
ddlb_4.additem(dw_1.getitemstring(i,'名称')
case '汉民'
ddlb_5.additem(dw_1.getitemstring(i,'名称')
case '苗族'
ddlb_6.additem(dw_1.getitemstring(i,'名称')
end choose
next

------解决方案--------------------
引用:
dw_1内容如下(数据来源Excel导入)
名称, 性别, 民族
张三, 男, 汉族
李四, 女, 苗族
王五, 男, 傣族
赵六, 男, 汉
田七, 女, 汉民
孙八, 男, 苗族

现在【想实现】点击窗口上面的 匹配 按钮弹出窗口
dw_mate数据如下(上面的民族数据去重复)
excel数据, 标准数据
汉族, 【下拉选择】
苗族,【下拉选择】
傣族,【下拉选择】
汉,【下拉选择】
汉民,【下拉选择】

初学没资料,如有空闲大神, 还请指点


用一个数据窗口,把原来的民族数据复制过来,然后用以下代码

dw_1.setsort("民族 A")
dw_1.sort()
dw_1.setfilter("民族 <> 民族[-1]")
dw_1.filter()

试试
------解决方案--------------------
这个简单呀,在数据窗口中,选择这个名族字段,然后在edit中的style type 中选择dropdowndw类型,及下拉数据窗口类型应用:在PB中巧用下拉数据窗口?
PowerPB提供了下拉数据窗口(DropDown?DataWindow),使数据窗口更灵活、更方便。在用数据窗口进行数据录入时,经常要用到代码录入,即对经常输入的某些值设置代码,录入时直接录入代码即可。例如,有两个表,主表main_table和代码表code_table,录入时主表中需要代码表中的数据,但不允许录入不在代码表中的数据。下面介绍如何使用下拉数据窗口实现上述功能。?
静态设计下拉数据窗口?
????首先对主表和代码表设计两个数据窗口dw_main和dw_code,其中dw_main包括字段id、name、sex、city和unit;dw_code包括字段code和data。假设unit字段有几个常用值可使用代码录入,则在设计dw_main时,用鼠标右键点击字段unit,在下拉菜单中选择Properties...(属性),则系统会弹出unit列的属性对话框;在其中选择Edit(编辑)项,并在Style(风格)下拉列表框中选择DropDownDW项;然后在下面的Options(选项)框中作具体的选项配置:在DataWindow下拉框中选择已设计好的代码数据窗口dw_code作为下拉数据窗口;在DisplayColumn(显示列)下拉框中选择code字段;在Data?Column(数据列)下拉框中选择data字段?,这表示显示的是code字段的内容,而实际存于表main_table中的是data字段的内容。至此,数据窗口设计完毕。?????设计完数据窗口后,需要建立一个数据录入的窗口(window),名字为w_input;在窗口w_input上建立一个数据窗口的控件dw_1,其属性DataWindow?Object?Name设为dw_main,并在w_input的open事件中写入下列语句:?????dw_1.SetTransObject(SQLCA)?????dw_1.Retrieve()?
????这样,在执行此窗口时,在unit字段上就会出现一个下拉列表框,列出了表code_table中所有的内容,用户可以用鼠标选择录入。?
动态改变SQL语句????在上面的例子中,如果表main_table中的字段city也需要代码录入,则还需为city字段新建一个表,这样很麻烦,因为有几个字段需要代码,就需有几个表与之对应。我们可利用下拉数据窗口的一些特点来解决这一问题。可以相应地修改表code_table的结构,加一?个字段field(char(30)),以存储需要代码的字段名,这样,就可利用SQL语句对之进行检索,以得到某字段的所有代码。具体实现如下:????重新设计数据窗口dw_code,把field字段加上并使它不可见(因为用户不需要见到该字段的内容),数据窗口dw_main和窗口w_input的设置同上,只是在数据窗口dw_1中需要进行一些编程。在ItemFocusChanged事件中,加入如下代码:?String?ls_sql?Integer?rtncode?
DataWindowChild?field_child?
//dwo为该事件的参数,其name属性的值表示获得焦点的字段名?Choose?Case?lower(dwo.name)?Case?‘city'?//city字段获得焦点?
//获得city字段下拉数据窗口的句柄?
rtncode?=?dw_1.GetChild("city",field_child)?
If?rtncode?=?-1?Then?MessageBox(?"Error",?"Not?a?DataWindowChild")?//设置事务对象?
field_child.SetTransObject(SQLCA)?//获得下拉数据窗口的SQL语句?ls_sql=field_child.GetSQLSelect()?//重新设置SQL语句,加上Where条件?


名人堂:众名人带你感受他们的驱动人生马云任志强李嘉诚柳传志史玉柱
 


ls_sql=ls_sql+"Wherefield=‘"+dwo.name+"'"?field_child.SetSQLSelect(ls_sql)?//取得满足条件的数据?field_child.Retrieve()?Case?‘unit'?unit字段获得焦点?
//获得unit字段下拉数据窗口的句柄?
rtncode?=?dw_1.GetChild("unit",field_child)?……(此处编程同上)?End?Choose?
动态设置取值参数????上例中采用动态改变SQL语句,其实,下拉数据窗口有一种更简单的方法就是设置取值参数(Retrieval?Arguments),但这种方法适合从固定表中取数据,如果是从动态表(即表名不固定)中取数据,则只能通过改变SQL语句来实现。?
????修改数据窗口dw_code,在图形方式下,选择Design菜单下的Retrieval?Arguments…,设置取值参数的类型为String,名字可任取,假设为field_data。然后在窗口下面的Where标签中选择Column为"code_table.field",Operator为"=",Value为取值参数的值:field_data(变量名前加冒号表示该变量的值),至此,取值参数设置完毕。同上例,也需要在窗口w_input中的数据窗口控件dw_1中的ItemFocusChanged事件中进行如下编程:?Integer?rtncode?
DataWindowChild?field_child?
//dwo为该事件的参数,其name属性的值表示获得焦点的字段名?Choose?Case?lower(dwo.name)?Case?‘city'//city字段获得焦点?//获得city字段下拉数据窗口的句柄?
rtncode?=?dw_1.GetChild("city",field_child)?
If?rtncode?=?-1?Then?MessageBox(?"Error",?"Not?a?DataWindowChild")?//设置事务对象?
field_child.SetTransObject(SQLCA)?
//利用取值参数取得满足条件的数据,如果没有数据,则插入一空记录,否则系统会提示一个英文对话框,要求输入取值参数的值?
If?field_child.Retrieve(dwo.name)<1?Then?field_child.InsertRow(0)?Case?‘unit'?//unit字段获得焦点?
//获得unit字段下拉数据窗口的句柄?
rtncode?=?dw_1.GetChild("unit",field_child)?……(此处编程同上)?End?Choose
  相关解决方案