2020-09-11

2020-09-10
a
修改数据后,窗口自动刷新跳到第一行

ls_cur_bh = Right('00000000' +String(ll_max_bh),6)
	SELECT count(1),BH Into:li_fz_count,:ls_tsfzbh From TJ_DWFZ_HD Where dwbh = :is_dwbh And dwtjcs = :ii_dwtjcs And fzlb = '1' Group By BH Using sqlca;
	IF li_fz_count = 0 THEN
				
	   INSERT INTO tj_dwfz_hd(bh,dwbh,dwtjcs,fzmc,xb,hyzk,zhxgr,zhxgrq,bzjg,dzbl,
						      tjywlx,jfjs,jsrs,xmzk,jxxmzk,jsfs,sfqy,jxzffs,tjlb,fzlb)
					VALUES(:ls_cur_bh,:is_dwbh,:ii_dwtjcs,'拆项分组','%','%',:gs_gkhm,
							:idt_sysdatetime,0,100,'01','zh','0',100,100,'1','1','1','01','1')
					COMMIT Using sqlca;
		UPDATE tj_tjdjb Set FZBH = :ls_cur_bh,ysbh = :ls_fzbh Where tjbh = :is_tjbh And tjcs = :ii_tjcs;
		UPDATE TJ_TJJLB Set FZBH = :ls_cur_bh Where tjbh = :is_tjbh And tjcs = :ii_tjcs;
		UPDATE TJ_TJJLB Set SSLX = 1 Where tjbh = :is_tjbh And tjcs = :ii_tjcs And SSLX = 0;
		dw_fzxx.Retrieve(ls_cur_bh)
	ELSE
		UPDATE tj_tjdjb Set FZBH = :ls_tsfzbh,ysbh = :ls_fzbh Where tjbh = :is_tjbh And tjcs = :ii_tjcs;
		UPDATE TJ_TJJLB Set FZBH = :ls_tsfzbh Where tjbh = :is_tjbh And tjcs = :ii_tjcs;
		UPDATE TJ_TJJLB Set SSLX = 1 Where tjbh = :is_tjbh And tjcs = :ii_tjcs And SSLX = 0;
		dw_fzxx.Retrieve(ls_tsfzbh)
	END IF
		cb_query.PostEvent(Clicked!)
		dw_tjxmxx.Retrieve(is_tjbh, ii_tjcs)
		dw_1.Retrieve()    --数值改变后,数据窗口进行刷新     Retrieve()检索数据窗口的数据

更改为刷新窗口后跳转到之前的选择值

long ll_r,ll_fnd
ll_r = dw_1.Getrow()
string ls_tjbh_1
long   ll_tjcs_1 
ls_tjbh_1 = dw_1.Getitemstring(ll_r , "tjbh")
ll_tjcs_1 = dw_1.GetItemNumber(ll_r , "tjcs")

.........
	dw_1.Retrieve()
	ll_fnd = dw_1.find("tjbh = '"+ ls_tjbh_1 +"' and tjcs = "+ string(ll_tjcs_1)  , 1 , dw_1.rowcount())
	if ll_fnd > 0 then
		dw_1.post ScrollToRow(ll_fnd)
       	dw_1.post selectrow(ll_fnd,true) 
	end if

b
导出数据窗口为Excel格式

// 数据窗口导出为excel

int 	 li_rc
string ls_path
string ls_file
string ls_currentdir
long   ll_rowcount
long   ll_colcount
time	 lt_1, lt_2
Integer li_ret = 1

if dw_4.rowcount() = 0 then
	messagebox('导出操作中止','导出人员清单为空!',Exclamation!)
	return
end if

dw_13.settransobject(sqlca)
dw_13.retrieve()
if dw_13.rowcount()=0 then dw_13.insertrow(0)
dw_13.reset()
dw_4.RowsCopy(1, dw_4.RowCount(), Primary!, dw_13, 1, Primary!)

dw_13.setfilter("sfbz = '1'")
dw_13.filter()

if dw_13.rowcount() = 0 then
	messagebox('导出操作中止','请选择需要导出的人员!',Exclamation!)
	return
end if

///////判断是否为正式用户
////if gs_register = 'N' then
////	messagebox('导出操作中止','您目前使用的是试用版,在成为正式用户~r~n~r~n并进行加密狗注册后,您才可以使用此功能!',Exclamation!)
////	return
////end if
//////检测加密狗是否正常
////gf_check_jmg()
//
//====================================================================
// 支持导出excel和word,保存对话框弹出后确保默认路径变为当前路径
//====================================================================
ls_currentdir = getcurrentdirectory()
li_rc = GetFileSaveName("选择文件", is_path, ls_file, "XLS", &
		  "Excel Files (*.xls),*.xls,")
changedirectory(ls_currentdir)
	
if li_rc <> 1 then
	return
end if

n_excel_parm lnvo_parm
//建立参数对象,调用gf_dw_to_excel_parm
lnvo_parm = Create n_excel_parm
lnvo_parm.ib_detail = true
lnvo_parm.ib_footer = true
lnvo_parm.ib_group_header = true
lnvo_parm.ib_group_trailer = true
lnvo_parm.ib_header = true
lnvo_parm.ib_show_progress = true
lnvo_parm.ib_summary = true
lnvo_parm.ib_prompt_openfile = true

li_ret = gf_dw_to_excel_parm_1(dw_13, is_path, lnvo_parm)
destroy lnvo_parm

3
单位显示不全,将编号换成名称,换行显示

select a.dwbh,a.tjbh,a.xm,a.xb,a.sfzh,a.hyzk,b.zgl,b.jhgl,b.dhzl,tjbhtm = '*' + Ltrim(a.tjbh) + '*' ,b.zglnew,b.jhglnew

from tj_tjdjb a,TJ_DWTJYDDJB_ZYB b where a.yybh = b.yybh and a.tjbh =:as_tjbh and a.tjcs =:ai_tjcs
select a.dwbh,a.tjbh,a.xm,a.xb,a.sfzh,a.hyzk,b.zgl,b.jhgl,b.dhzl,tjbhtm = '*' + Ltrim(a.tjbh) + '*' ,b.zglnew,b.jhglnew,c.mc

from futian_user.tj_tjdjb a,futian_user.TJ_DWTJYDDJB_ZYB b,futian_user.HYDWDMB c 
where a.yybh = b.yybh and a.tjbh =:as_tjbh and a.tjcs =:ai_tjcs
and c.bh=a.dwbh

4
加日期,检索条件更改

  SELECT TJ_TJDJB.TJBH,   
         TJ_TJDJB.TJCS,   
         TJ_TJDJB.XM,   
         TJ_TJDJB.XB,   
         TJ_TJDJB.CSNYR,   
         left(TJ_TJDJB.DWBH,4) as DWBH, 
			case len(TJ_TJDJB.DWBH) when 4 then '' else TJ_TJDJB.DWBH end as BMBH,
         TJ_TJDJB.TJRQ,   
         TJ_TJDJB.DJRQ,   
         TJ_TJDJB.DJRY,   
         TJ_TJDJB.JCRQ,   
         TJ_TJDJB.JCYS,   
         TJ_TJDJB.GDRQ,   
         TJ_TJDJB.GDYS,   
         CHAR(9)+TJ_TJDJB.SFZH AS SFZH,   
         TJ_TJDJB.DJLSH,   
         TJ_TJDJB.SUMOVER,   
         TJ_TJDJB.DYCS,   
         TJ_TJDJB.DYRQ,   
         TJ_TJDJB.JSFS,  
			TJ_TJDJB.FZBH,  
			TJ_TJDJB.RYLB,  
         TJ_TJDJB.PHONE,
			TJ_TJDJB.TJBGFFBZ,
			TJ_TJDJB.TJBGFFRQ ,
			TJ_TJDJB.MOBILE,
         TJ_TJDJB.NL,
         TJ_TJDJB.DYCS,
			'0' as SELECTED,
         TJ_TJDJB.DJRY,
         TJ_TJDJB.YDJBZ,
         max(TJ_TJJLB.YDTJRQ) YDTJRQ     --记录表的预约日期
    FROM TJ_TJDJB
    JOIN TJ_TJJLB ON TJ_TJDJB.TJBH = TJ_TJJLB.TJBH AND TJ_TJDJB.TJCS = TJ_TJJLB.TJCS
    GROUP BY	TJ_TJDJB.TJBH,TJ_TJDJB.TJCS,TJ_TJDJB.XM,TJ_TJDJB.XB,TJ_TJDJB.CSNYR,TJ_TJDJB.DWBH,TJ_TJDJB.TJRQ,
				TJ_TJDJB.DJRQ,TJ_TJDJB.DJRY,TJ_TJDJB.JCRQ,TJ_TJDJB.JCYS,TJ_TJDJB.GDRQ,TJ_TJDJB.GDYS,TJ_TJDJB.SFZH,
				TJ_TJDJB.DJLSH,TJ_TJDJB.SUMOVER,TJ_TJDJB.DYCS,TJ_TJDJB.DYRQ,TJ_TJDJB.JSFS,TJ_TJDJB.FZBH,TJ_TJDJB.RYLB,
				TJ_TJDJB.PHONE,TJ_TJDJB.TJBGFFBZ,TJ_TJDJB.TJBGFFRQ,TJ_TJDJB.MOBILE,TJ_TJDJB.NL,TJ_TJDJB.DYCS,TJ_TJDJB.DJRY,
				TJ_TJDJB.YDJBZ
string ls_sql_new, ls_select, ls_where,ls_group
long ll_pos,ll_post,ll_len

//SELECT部分
ls_select = adw_source.getsqlselect()
ll_pos = pos(ls_select, 'WHERE')
if ll_pos > 0 then
	ls_select = left(ls_select, ll_pos - 1)
end if
	
//pcy 09-11
ll_post = pos(ls_select, 'GROUP BY')
ll_len = len(ls_select)
if ll_len > 0 then
	ls_group = right(ls_select, ll_len - ll_post +1)
end if
if ll_post > 0 then
	ls_select = left(ls_select, ll_post - 1)
end if
//=========================================================================
// 组合新的SQL语句
//=========================================================================
if len(trim(ls_where)) > 0 then	//存在WHERE赋值条件
	if len(trim(as_where)) > 0 then	//存在固定WHERE条件
		ls_sql_new = ls_select + as_where + ls_where + ls_group
	else	//不存在固定条件
		ls_sql_new = ls_select + ' WHERE ' + right(ls_where, len(ls_where) - 5) + ls_group
	end if
else	//不存在赋值条件
	if len(trim(as_where)) > 0 then	//存在固定WHERE条件
		ls_sql_new = ls_select + as_where + ls_group
	else	//不存在固定条件
		ls_sql_new = ls_select + ls_group
	end if
end if

return ls_sql_new
dw_main.dataobject = "dw_cx_tjbgcx_dq_new"
dw_main.settransobject(sqlca)
dw_main.SetRedraw(False)
dw_main.Reset()

li_arrycnt = upperbound(invo_qc.is_dwbh[])

//=========================================================================
// [Script - wf_query ( ) ]
// [原  因] 优化检索
//=========================================================================
string ls_sqlsyntax,ls_where
ls_where = ""
FOR li_start = 1 TO li_arrycnt

	ls_sqlsyntax = wf_get_sqlsyntax(dw_main, ls_where, li_start)

	if dw_main.setsqlselect(ls_sqlsyntax) <> 1 then
		messagebox('错误','SETSQLSELECT错误')
	end if
	ll_rowcnt = dw_main.Retrieve()
	
	ls_sqlsyntax = wf_get_sqlsyntax(dw_preview, ls_where, li_start)
	if dw_preview.setsqlselect(ls_sqlsyntax) <> 1 then
		messagebox('错误','SETSQLSELECT错误')
	end if
	dw_preview.retrieve()
NEXT

Left()
功能得到字符串左部指定个数的字符。
语法Left ( string, n )
参数string:string类型,指定要提取子串的字符串n:long类型,指定子串长度返回值String。函数执行成功时返回string字符串左边n个字符,发生错误时返回空字符串("")。如果任何参数的值为NULL,Left()函数返回NULL。如果n的值大于string字符串的长度,那么Left()函数返回整个string字符串,但并不增加其它字符。
LeftTrim()
功能返回指定字符串删除了左部空格后的字符串。
语法LeftTrim ( string )
参数string:string类型,指定要删除左部空格的字符串返回值String。函数执行成功时返回删除了string字符串左部空格的字符串,发生错误时返回空字符串("")。如果任何参数的值为NULL,LeftTrim()函数返回NULL。
Len()
功能得到字符串的长度。
语法Len (string)
参数string:string类型变量返回值Long。函数执行成功时返回字符串的长度,发生错误时返回-1。如果任何参数的值为NULL,则Len()函数返回NULL。

Post()
功能将指定消息加入到某个窗口的消息队列中,这个窗口既可以是PowerBuilder应用的窗口,也可以是其它应用的窗口。
语法Post( handle, messageno, word, long )
参数handle:long类型,指定窗口的系统句柄,将向该窗口邮寄消息messageno:UnsignedInteger类型,指定要邮寄的消息号 word:long类型,指定与消息一起邮寄的word类参数值。如果messageno参数指定的消息不使用该参数,那么将这个参数的值设置为0long:long类型或string,指定与消息一起邮寄的long型参数值或字符串返回值Boolean。如果任何参数的值为NULL,Post()函数返回NULL。
用法Post()函数用于向窗口发送非PowerBuilder预定义事件的消息,这个窗口可以是PowerBuilder应用的窗口,也可以是其它应用的窗口。Post()函数把发送的消息放置在指定窗口消息队列的尾部,然后返回到应用程序中,它并不等待相应事件事件处理程序的执行。这一点与Send()函数不同,Send()函数直接触发指定窗口相应的事件,执行事件处理程序后返回到调用应用中。因此,我们说Post()函数采用的是异步方式,Send()函数采用的是同步方式。Post()函数的参数handle指定接收消息的窗口句柄,对PowerBuilder窗口来说,使用Handle()函数可以得到该句柄。对其它应用程序的窗口来说,可以调用系统API函数查找窗口并得到相应窗口的句柄。如果应用程序要邮寄PowerBuilder定义事件(包括预定义事件和用户定义事件),那么使用PostEvent()函数既简单有方便。当应用程序在long参数位置指定一个字符串时,Post()函数复制一个该字符串的副本,然后将副本的地址传送给指定窗口。

if row > 0 then
this.selectrow(0,false)
this.SelectRow(row,true)
end if
//高亮显示选中行

在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值