hur.cn - 华软网

 热门搜索

高分求助:数据窗口数据更新问题(急!!)

  作者:未知    来源:网络    更新时间:2018/12/6
问题描写:
   用表table1的视图view1创建的数据窗口dw_view1,dw_view1中有一列名为“生产定单号”的字段允许用户更改数据。在挂dw_view1的窗口上有一个“保存”按钮,当用户按“保存”时,把dw_view1的“生产定单号”字段的值更新到表table1响应的字段中。
   我在“保存”按钮中编写的代码是:
   string s_scddh,s_scddh2
   double i,d_prscddh,d_lsh_id
   dw_view1.accepttext()
   setpointer(hourglass!)

   for i=dw_view1.rowcount() to 1 step -1
      d_lsh_id=dw_view1.getitemnumber(i,'流水号')
      s_scddh=dw_view1.getitemstring(i,'生产定单号')
      s_scddh=right('000000000000'+trim(s_scddh),12)
      select scddh into :s_scddh2 from table1 where lsh_id=:d_lsh_id using sqlca;
      if s_scddh<>s_scddh2 then 
update table1 set scddh = :s_scddh where lsh_id=:d_lsh_id using sqlca;
if sqlca.sqlcode<>0 then
   rollback using sqlca;
   messagebox('毛病提醒:','更新生产定单号失利!'+sqlca.sqlerrtext)    return 
end if
      end if
   next
   commit using sqlca;
   messagebox('系统提醒','保存成功!')
   setpointer(arrow!)

   这些代码能够实现功能,然则我想提高性能,可不能够用其余的措施来实现,而不用去表table1里面检索数据来与dw_view1中的数据逐个对照?

   不知道DW中有没有什么属性或能够简化这类做法,希望大虾指点一些,问题解决马上结贴!
------华软网友回答------
不知道你为什么把dw_view1从视图view1,而不是直接从table1直接生成呢?
------华软网友回复------
你的数据窗中是否已经检索出所有数据了?
如果已经检索出所有数据,那么只需要判断数据窗中的数据不重复就能够了。不用取内外的数据对照。
------华软网友回复------
如果是多人操作,照旧只可逐个对照,如果是单人操作,那么直接判断dw中该字段是否有重复数据即可
------华软网友回复------
有视图做的DW也能够UPDATE
------华软网友回复------
Top  
 freeliu() ( ) 信誉:100    Blog  2006-09-07 09:00:00  得分: 0  
 
 
   你的数据窗中是否已经检索出所有数据了?
如果已经检索出所有数据,那么只需要判断数据窗中的数据不重复就能够了。不用取内外的数据对照。
 

 --------------------------------------

我取的只是部份数据而已
 
 

------华软网友回复------
能够根据数据窗口的行状态判断数据是否更新或新插入数据,若是到数据库中对照是否有重复数据;若不是,直接判断其余行数据。

 for i=dw_view1.rowcount() to 1 step -1
      if dw_view1.GetItemStatus(i,0,Primary! )=NotModified! or dw_view1.GetItemStatus(i,0,Primary! )=New then CONTINUE
      d_lsh_id=dw_view1.getitemnumber(i,'流水号')
      s_scddh=dw_view1.getitemstring(i,'生产定单号')
      s_scddh=right('000000000000'+trim(s_scddh),12)
      select scddh into :s_scddh2 from table1 where lsh_id=:d_lsh_id using sqlca;
      if s_scddh<>s_scddh2 then 
update table1 set scddh = :s_scddh where lsh_id=:d_lsh_id using sqlca;
if sqlca.sqlcode<>0 then
   rollback using sqlca;
   messagebox('毛病提醒:','更新生产定单号失利!'+sqlca.sqlerrtext)    return 
end if
      end if
   next
dwcontrol.GetItemStatus ( row, column, Primary! )能够猎取该缓冲区内指定单元的状态,当参数column为0时,表示读取整个列的修改状态。
------华软网友回复------
如果是检索出部份数据的话,那么我想就没有什么好措施了。你能够所一个数据存储(datastore),把所有的定单号先检索出来。然后和这个datastore中的数据对照。然则这样有一个并发性的问题。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。