您的位置:程序门 -> vb -> 非技术类



保存时id重复,如何处理?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


保存时id重复,如何处理?[无满意答案结贴,结贴人:qw2008]
发表于:2007-09-08 16:39:58 楼主
现在有一数据库,是软件公司提供的商业化程序,但是程序不够完善,所以我在他的数据库基础上直接挂了一个开单的小程序,我在挂接后其他都好,但是保存时会和他的id重复,我想了都n天了,都不知道该如何是好!

他的表中所有单据类型都是保存在同一张表中,如销售出库单用1表示,入库单用2表示,等等,一共有6种表单.在商业程序的销售出库单我是废弃不用的,因此销售出库单会和其他单据类型重复,造成单据中会有其他类型的数据,搞得我很难看,请各位大侠帮帮我,解决一下这个问题!


他的id不是自动编号的,是采用在另外一张上保存,保存时自动加1这种方式.因为是在局域网内用的人比较多,难免会在相同的时间内保存,所以就出现了上述的问题.

我的代码如下:


sub   mylink()连接数据库
set   cnn   =   createobject( "adodb.connection ")
set   rst   =   createobject( "adodb.recordset ")
  cnn.open   "provider=sqloledb;server= "   &   sserver   &   ";database=jr2007080814;uid=sa;pwd=; "
cnn.cursorlocation   =   aduseclient
end   sub


sub   pzsale()   '主表

      call   mylink
        sql1   =   "select   fmaxnum   as   billnomax   from   tblmaxnum   where   ftablename= 'icstockbill ' "
          rst.open   sql1,   cnn,   adopenkeyset,   adlockoptimistic
          ff   =   rst.fields( "billnomax ")


          sql   =   "insert   into   icstockbill(finterid,fstatus,fcancellation,fstockid1,fcustomerid,fstyleid,fdeptid,femperid,ffmanager,fsmanager,fdate,foperator,ftrantype,fyear,fperiod,frob,fbillno) "
          sql   =   sql   &   "   values( ' "   &   ff   &   " ', ' "   &   0   &   " ', ' "   &   0   &   " ', ' "   &   11   &   " ', "
          sql   =   sql   &   " ' "   &   range( "e7 ").value   &   " ', "
          sql   =   sql   &   " ' "   &   3   &   " ', "
          sql   =   sql   &   " ' "   &   trim(left(range( "k18 ").value,   4))   &   " ', "
          sql   =   sql   &   " ' "   &   range( "k7 ").value   &   " ', "
          sql   =   sql   &   " ' "   &   0   &   " ', "
          sql   =   sql   &   " ' "   &   0   &   " ', "
          sql   =   sql   &   " ' "   &   format(range( "i7 ").value,   "yyyy-mm-dd ")   &   " ', "
          sql   =   sql   &   " ' "   &   userid   &   " ', "
          sql   =   sql   &   " ' "   &   4   &   " ', "
          sql   =   sql   &   " ' "   &   2007   &   " ', "
          sql   =   sql   &   " ' "   &   ffperiod   &   " ', "
          sql   =   sql   &   " ' "   &   0   &   " ', "
          sql   =   sql   &   " ' "   &   range( "k6 ").value   &   " ') "
            cnn.EXECute   sql
           
        set   rst   =   nothing:   cnn.close
end   sub

sub   pzsaleqq()     '附表
    call   mylink
      dim   p   as   integer,   pp   as   integer
        for   p   =   9   to   14
        pp   =   p   -   8
          if   range( "e "   &   p).value   <>   " "   then
    with   rst
          sql   =   "insert   into   icstockbillentry(finterid,forderid,fentryid,fitemid,funitid,fbatchno,fqty,fprice,famount,ftax,fpricetax,famounttax,fmemory,fdorderid,fnoticeid) "
          sql   =   sql   &   "   values( ' "   &   ff   &   " ', ' "   &   pp   &   " ', ' "   &   pp   &   " ', "
          sql   =   sql   &   " ' "   &   iif(range( "e "   &   p).value   =   " ",   null,   range( "e "   &   p).value)   &   " ', "
          sql   =   sql   &   " ' "   &   iif(range( "h "   &   p).value   =   " ",   null,   range( "h "   &   p).value)   &   " ', "
          sql   =   sql   &   " ' "   &   " "   &   " ', "     '批次
          sql   =   sql   &   " ' "   &   iif(range( "j "   &   p).value   =   " ",   null,   range( "j "   &   p).value)   &   " ', "     '数量
          sql   =   sql   &   " ' "   &   iif(range( "k "   &   p).value   =   " ",   null,   range( "k "   &   p).value)   &   " ', "     '单价
          sql   =   sql   &   " ' "   &   iif(range( "l "   &   p).value   =   " ",   null,   range( "l "   &   p).value)   &   " ', "     '金额
          sql   =   sql   &   " ' "   &   0   &   " ', "     '税率
          sql   =   sql   &   " ' "   &   iif(range( "k "   &   p).value   =   " ",   null,   range( "k "   &   p).value)   &   " ', "     '单价
          sql   =   sql   &   " ' "   &   iif(range( "l "   &   p).value   =   " ",   null,   range( "l "   &   p).value)   &   " ', "     '金额
          sql   =   sql   &   " ' "   &   " "   &   " ', "         '备注
          sql   =   sql   &   " ' "   &   0   &   " ', "           '销售订单
          sql   =   sql   &   " ' "   &   0   &   " ') "           '发货通知单
            cnn.EXECute   sql
      end   with
        end   if
next   p
        msgbox   "销售出库单保存成功! ",   ,   "dovro "
        set   rst   =   nothing:   cnn.close
end   sub


sub   dovromax()
    call   mylink
        sql   =   "update   tblmaxnum   set   fmaxnum=fmaxnum+1   where   ftablename= 'icnoticebill ' "
        cnn.EXECute   sql
    set   rst   =   nothing:   cnn.close
end   sub


sub   commbarsave()
if   range( "e7 ").value   =   " "   or   range( "j9 ").value   =   " "   or   range( "k7 ").value   =   " "   then
    msgbox   "请将发货通知单内容录入完整! ",   1   +   64,   "dovro "
    exit   sub
end   if
call   mylink
      sql   =   "select   fbillno   from   icnoticebill   "
          rst.open   sql,   cnn,   adopenkeyset,   adlockpessimistic
              rst.find   "fbillno   =   ' "   &   range( "k6 ").value   &   " ' "
        if   not   rst.eof()   then
            msgbox   "该单据已保存,请勿再次点击保存! ",   vbokonly,   "dovro "
        exit   sub
  end   if
  call   pzsale                                                 '销售出库单主表
  call   pzsaleqq                                             '销售出库单附表
  call   dovronomax                                         '更新销售出库单最大单号
end   sub

大概情况也就是这样了,请大家帮我想想办法!谢谢!
发表于:2007-09-08 17:00:151楼 得分:0
太多了,没法看。如果是添加新记录时,在保存之前先到数据库中找一个有没有相同id号的,没有正常添加,否则另做处理
发表于:2007-09-12 18:43:082楼 得分:0
不说别的,顶了.
发表于:2007-09-12 18:44:333楼 得分:0
不说别的,顶了.
发表于:2007-09-12 19:01:124楼 得分:0
看ado begintrans、committrans   和   rollbacktrans   方法


快速检索

最新资讯
热门点击