首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

怎么保存多条记录

2013-02-03 
如何保存多条记录在入库窗口有dw_1、cb_1(新增)和cb_2(保存)按钮。保存时,要入库表与库存表(stock)都有记录,

如何保存多条记录
在入库窗口有dw_1、cb_1(新增)和cb_2(保存)按钮。保存时,要入库表与库存表(stock)都有记录,但现在新增一条记录,入库表与库存表是没有问题,都有记录,但新增多条记录时,库存表就只有一条记录。可见保存少了循环语句,但我不知怎么在以下代码加入循环语句,请高手帮帮忙。。。谢谢怎么保存多条记录
integer number,putin_number,sl

string product_no,save_code

string ls_fieldname//主键名称
long ll_rc        //数据窗口中总的数据行数

ls_fieldname = 'rkdbh'
dw_1.SetFilter("1=1")
dw_1.Filter()
ll_rc = dw_1.RowCount()
dw_1.SetSort(ls_fieldname + " A")
dw_1.Sort()

dw_1.SetFilter(ls_fieldname + " <> " + ls_fieldname + "[-1] or GetRow() =1")
dw_1.Filter()

if dw_1.RowCount() < ll_rc then
    MessageBox("提示","编号存在重复的数据!",StopSign!)
   else
        save_code=dw_1.GetItemString(dw_1.getrow(),"lbbh")
product_no=dw_1.GetItemString(dw_1.getrow(),"xhbh")
  
//确定仓库中现有该设备的数量
SELECT max(stock.kcsl)  INTO :number FROM stock
 WHERE (stock.xhbh=:product_no) and (stock.lbbh=:save_code)
         using sqlca;
///取得入货数目
        if isnull(number) then
sl=dw_1.getitemnumber(dw_1.getrow(),"rksl")
insert into "stock" ("lbbh","xhbh","kcsl") values(:save_code,:product_no,:sl);
        commit;
   else
putin_number= integer(dw_1.object.rksl[dw_1.getrow()]) 
number = number + putin_number
//增加库存
UPDATE stock SET kcsl =:number 
            WHERE (stock.xhbh=:product_no) and      (stock.lbbh=:save_code);
//保存数据到进库表格中
        commit;
        end if 

   dw_1.update()

   messagebox("提示","保存成功")
end if
[解决办法]

无法测试



在入库窗口有dw_1、cb_1(新增)和cb_2(保存)按钮。保存时,要入库表与库存表(stock)都有记录,但现在新增一条记录,入库表与库存表是没有问题,都有记录,但新增多条记录时,库存表就只有一条记录。可见保存少了循环语句,但我不知怎么在以下代码加入循环语句,请高手帮帮忙。。。谢谢
integer number,putin_number,sl

string product_no,save_code

string ls_fieldname//主键名称
long ll_rc        //数据窗口中总的数据行数
long ll_i

ls_fieldname = 'rkdbh'
dw_1.SetFilter("1=1")
dw_1.Filter()
ll_rc = dw_1.RowCount()
dw_1.SetSort(ls_fieldname + " A")
dw_1.Sort()

dw_1.SetFilter(ls_fieldname + " <> " + ls_fieldname + "[-1] or GetRow() =1")
dw_1.Filter()

if dw_1.RowCount() < ll_rc then
    MessageBox("提示","编号存在重复的数据!",StopSign!)
else
    for ll_i = 1 to ll_rc 
      if dw_1.GetItemStatus(ll_i,0,Primary!) = NotModified!then continue

      save_code=dw_1.GetItemString(ll_i,"lbbh")
      product_no=dw_1.GetItemString(ll_i,"xhbh")
        
      //确定仓库中现有该设备的数量


      SELECT max(stock.kcsl)  INTO :number FROM stock
      WHERE (stock.xhbh=:product_no) and (stock.lbbh=:save_code)
             using sqlca;
      ///取得入货数目
      if isnull(number) then
        sl=dw_1.getitemnumber(ll_i,"rksl")
        insert into "stock" ("lbbh","xhbh","kcsl") values(:save_code,:product_no,:sl);
                commit;
      else
        putin_number= integer(dw_1.object.rksl[ll_i]) 
        number = number + putin_number
        //增加库存
        UPDATE stock SET kcsl =:number 
                    WHERE (stock.xhbh=:product_no) and      (stock.lbbh=:save_code);
        //保存数据到进库表格中
                commit;
      end if   
   next                                                                  

   dw_1.update()

   messagebox("提示","保存成功")
end if 


[解决办法]
1.循环里
insert into "stock" ("lbbh","xhbh","kcsl") values(:save_code,:product_no,:sl);
commit;

UPDATE stock SET kcsl =:number 
 WHERE (stock.xhbh=:product_no) and      (stock.lbbh=:save_code);
//保存数据到进库表格中
commit;

这里的commit;最好改成
if sqlca.sqlcode <> 0 then
   rollback; --事务回滚
   messagebox('','')  --提示错误
   return;--退出
end if

2.dw_1.update()
 
messagebox("提示","保存成功")


这里也改下

if dw_1.update() = 1 then
   commit;
   messagebox("提示","保存成功")
else
   rollback; --事务回滚
   messagebox('','')  --提示错误
end if


一般情况下,只需要在dw_1.update()后面写一个commit即可,这样可以保证事务的完整性。
只要有一个表更新出错,整个事务就回滚了。如果按你原来的写法,则有可能出现一个表更新了
数据,另外一个表更新失败,没有新数据





热点排行
Bad Request.