用扫码器录入条形码后,然后就在数据库的商品库存表查找本条形码对应商品记录然后返回具体信息。用一个adodataset连接到商品库存表,不可能把整个商品库存表都下载到本地吧,如有10多万条记录那得很久,如果每录入一个条形码都要close,open一次查询商品库存表,这样会不会造成服务器负担?

解决方案 »

  1.   


    -----------------配送状态录入表
     CREATE PROCEDURE  TT_P017@MainBiao        Varchar(20), ---是否插入主表记录
    @PeopleId       varchar(20),    --调度人员号
    @Groupname          varchar(20),    --配送组织
    @SendMainId      varchar(7000) ,-- 送货细单号
    @SendMinuteId  varchar(7000) ,-- 送货细单号
    @GoodsCount     varchar(7000),        ---送货数量
    @ShouldGet        varchar(7000),         ----应收
    @ShouldPay       varchar(7000),         -----应付
    @count               int,
    @re_String varchar(2) out,
    @re_message varchar(100) out,
    @re_Sid varchar(14) out
    as 
    declare 
        
         @n                     int,
         @StateMainId     Varchar(30) , --调度单号
         @Smainid            varchar(30),
         @Sminuteid            varchar(30),
         @StateMinuteId  varchar(30), 
        @GroupID            varchar(20),
         @gCount              money,
         @Get                  money,
         @Pay                 money, 
         @day                  varchar(10),
         @RiQi                 varchar(10)
            set @day=(select  (convert(varchar(10), GETDATE())) )
            set @riqi=(substring(@day,7,10)+'-' +substring(@day,1,2)+'-'+substring(@day,4,5) )
           ------------------
            
            set @StateMinuteId=((select  isnull(max(StateMinuteid),'1000000000')  from TT_StateMinute) +1  )       
             set @StateMainId=((select  isnull(max(StateMainid),'1000000000')  from TT_statemain) +1  )    ------添加状态主表begin tran
    set  set nocount on
    begin
           set @GroupId=(select group_Id From  TT_SUBGROUP   where Group_Name=@GroupName)
             Insert Into TT_StateMain  values(@StateMainID,@PeopleID,@RiQi,@GroupId)
             if @@error <>0  goto error1
          
    end
    --------添加状态细单
    begin
            set @n=1   
          while  @n <=@count 
             begin
              
                   select @Gcount= convert(money, dbo.gain(@goodscount,@n) ) ,@SMainID=convert (varchar(20), dbo.gain(@SendMainID,@n) ) ,@SMinuteId=dbo.gain(@SendMinuteId,@n) , @get=convert( money,dbo.gain (@ShouldGet,@n) ), @pay=convert(money,dbo.gain(@shouldPay,@n) )
                   Insert Into TT_StateMinute Values(@StateMinuteId,@StateMainid,@SMainID,@SMinuteId,@GCount,@Get,@Pay)
                    
                   if @@error <>0  goto error2
                    else
                        goto succ         update       TT_SendMinute  set Sendstate ='02' where SendMinuteid=@SendMinuteiD-----state 
             if @@error <>0  goto error3
             set @n =@n +1  
         end 
    end
    goto succ
     
    ------------------
    succ:
    begin   set @re_message='1000001插入状态主表成功'
       commit transaction
     goto   pover
    enderror1:
    begin
       rollback tran
        set @re_message ='1000002插入状态主表失败'
     goto  pover
    end
    error2:
    begin
       RollBack Tran
      set @re_message ='1000003插入状态细表失败'
    goto  pover
    endError3:
    begin
      rollBack Tran
      set @re_message ='1000004更新失败 '
      goto  pover
    end
    pover:
    begin
        set nocount off
    end
    GO
      

  2.   

    楼据量那么大,只能用close,open或用楼主的过程;
      

  3.   

    其实你不用每次扫描的时候都Close,Open,因为你的商品一天变化不了多少的
    1.你可以在窗口打开的时候调用一下CLose,Open
    2.你在窗口上加一个“刷新”按钮,随时点随时刷新
    3.若客户拿到一个商品,而你这里没有扫出来时,你再点一下“刷新”按钮也不迟的
      

  4.   

    如果Close,Open一次的话,如果有几十万条记录,那么要等多久啊!那肯定是不可能的事
    每次Close,Open只是回传一条或几条记录(存在条形码重复)而已嘛。
      

  5.   

    不是搞技术的,但对pos有些肤浅认识,象这种情况,必须把所有商品资料下载到本地,否则无法实现断网收银,如果象之前你说的那种方式,服务器负荷大不说,关键这样会速度很慢,而且不稳定。不是成熟的方案。只有零售后库存扣减问题,要在买单后进行数据适时上传。
      

  6.   


    一个处理你问题的方法,希望能帮到你,你为什么要每次都open close呢,我不明白。
    一个简单方法,时标,每次输入的数据都有一个字段(datetime)作为时标。
    在本地建立小型的本地数据库,每次登陆服务器仅仅是获得最新修改增加的记录然后存储在本地小型数据库中,这样应该可以避免的哦。
      

  7.   

    前一个单位用过的软件,本地用sqlanywhere 远程用sybase ,每天用其他方式进行更新本地数据库,
      

  8.   

    to YANGYUGW(小杨): 
    "时标,每次输入的数据都有一个字段(datetime)作为时标"是什么意思呢?怎么获得最新修改增加的记录呢?是不是用“时标”呢?
    "你为什么要每次都open close呢,我不明白。"因为每录入一本书就要到服务器器取得本书的信息,然后插入到销售单。用adoquery.open实现查询。open后只是返回查询得到的记录,
    并不回增加网络的负担,我是怕频繁查询会不会增加服务器负担呢!
    to:zhangcy001(凭海风) 
    所有商品资料下载到本地是不可能的,几十万条记录要很久的!为什么无法断网收银?
    结算后就把零售单提交到数据库,同时修改库存。你所说的“而且不稳定”指的是什么呢?
    thank you for everyone
      

  9.   

    时标就是数据库表中自己定义的字段
    select * from dd where dt>你本地数据库表中最新的时标
    那么你每次还需要下载几十万么,难道这几十万都要每天更新一次么。