当前位置: 代码迷 >> PB >> 行列转换后数据不会实时更新?解决方案
  详细解决方案

行列转换后数据不会实时更新?解决方案

热度:86   发布时间:2016-04-29 09:42:22.0
行列转换后数据不会实时更新?
有dw d_ztxm 从表ztxm 含有 材料clbh 质检项目zjxm 质检标准 zjbz
  aa o2 >20
  bb o2 >10
  aa c3 <3
  cc c3 >5
 

现在要转换成 d_zjbz 材料clbh o2 c3
  aa >20 <3
  bb >10 
  cc <5  

使用sql 语句直接构成d_zjbz
DECLARE @sql varchar(8000)
SET @sql = ''
SELECT @sql = @sql+',
max(case when zjxm = '''+zjxm+''' then zjbz END) as '''+zjxm+''''
FROM zjxm
GROUP BY zjxm
SELECT @sql = 'select [email protected]+' from zjxm group by clbh'
EXEC(@sql)
可以正常显示,但是出现问题
当我在d_zjxm 中增加新的项目是不会实时更新到d_zjbz 中,那位老大帮帮忙? 

 
 

------解决方案--------------------
建个存储过程,
SQL code
create proc P_tmpasDECLARE @sql varchar(8000) SET @sql = '' SELECT @sql = @sql+', max(case when zjxm = '''+zjxm+''' then zjbz END) as '''+zjxm+'''' FROM zjxm GROUP BY zjxm SELECT @sql = 'select [email protected]+' from zjxm group by clbh' EXEC(@sql)
------解决方案--------------------
楼主,非得要用这个数据窗口来保存数据吗?

如果用这个数据窗口保存数据,建议在数据窗口的updatestart自己生成sql语句进行更新

最好的方法是再建一个数据窗口dw_source,然后把修改内容移至dw_source,然后再保存dw_source
------解决方案--------------------
//根据行状态,来构造sql语句,lz先试试吧
dwItemStatus l_status
string ls_clbh,ls_zjxm,ls_zjbz,ls_error
long i
for i=1 to dw_1.rowcount()
ls_clbh=dw_1.getitemstring(i,'clbh')
ls_zjxm=dw_1.getitemstring(i,'zjxm')
ls_zjbz=dw_1.getitemstring(i,'zjbz')
l_status = dw_1.GetItemStatus(i,0, Primary!)
choose case l_status 
case New!,NewModified!
insert into ztxm (clbh,zjxm,zjbz) values(:ls_clbh,:ls_zjxm,:ls_zjbz);
case DataModified!
update ztxm set zjbz =,:ls_zjbz where clbh=:ls_clbh and zjxm=:ls_zjxm;
case else
end choose
if sqlca.sqlcode=0 then
commit;
else
ls_error=sqlca.sqlerrtext
rollback;
messagebox('系统提示','第'+string(i)+'行提交错误:'+ls_error)
next
  相关解决方案