请教诸位。
 偶在vb 中需要设置一个订单号,要求如下:
 一,第一次运行程序时,需要设置一个起始值。
二,以后运行程序时,订单号会自动递加值1,比如,1,2,3,4.......并在文本框中显示。
三,格式可以自己设置比如是 gh200800001之类的。
四,订单号可以保存到sql 中的。

解决方案 »

  1.   

    在数据库设置一个ID,自动加1
    每次取最后一个ID,然后"订单号=gh+ID+1"
      

  2.   

    如何在数据库中设置id?我需要的格式 是gd-jy20081到---------gd-jy20081000.小弟不才,敬请指教啊!
    现在我用的是 max(sumstring(订单号,10,34))函数取出最大值,然后递加1的.可是当累加到gd-jy200810的时侯,就出错了,好象是max(sumstring(订单号,10,3))函数取出的最大值是9,而取不到10的.请教达人,为什么是这样呢?
      

  3.   

    1) Select ID From Table1 order by DESC2) int1 = mid(rs!ID, 5, len(rs!ID))3) int1 = int1 + 14) rs.addnew
       rs!ID = "gd-jy" & int1
       rs.update
       rs.close
    以上为简短代码,请自己扩充为完整代码。
      

  4.   

    to tanjiunya:
      这个办法试了试可以,只是感觉还是欠周密,还有什么办法可以取出最大值呢?max函数是怎么比较呢?比如gd--jy200810和 gd--jy20089为什么max(sumstring(订单号,10,4))比较时是后者值最大呢?
    敬请指教!
      

  5.   

    不好意思,这几天太忙了,没有上来.代码如下:
     Dim n0 As String    ''''''取产品统计中的最后的订单号然后加1生成新的连续的订单号
     Dim i0 As String
     Dim t0 As Integer
    '''''''''''''''''''''''''''''''当订单号为两位数时,无法比较出最大值 比如gd-jy200810不是最大值,而是gd-jy20089
    '''''''''''''''''''''''''''''''按订单号降序后再取值加1生成新的连续的订单号  order by  len(订单号),完工日期  '''''''''''''''''''''''''''''''''''完工日期有局限性。当同一天输入三个以上订单时,会出现排序错误。
     Set rs0 = New ADODB.Recordset
         rs0.Open "select 订单号 from 产品及计费统计  where 产品类别='" & Trim(Combo7) & " ' order by  len(订单号),完工日期    ", cn, adOpenStatic, adLockReadOnly
          rs0.MoveLast
          Text19.Text = rs0.Fields("订单号")
           If rs0.RecordCount <> 0 Then
               i0 = Trim(Mid(rs0.Fields("订单号").Value, 10, 4) + 1)
            If Trim(Combo7) = "报纸" Then
                  Text19.Text = "GD-BZ2008" + i0
               ElseIf Trim(Combo7) = "胶印" Then
                  Text19.Text = "GD-JY2008" + i0
               ElseIf Trim(Combo7) = "精品" Then
                  Text19.Text = "GD-JP2008" + i0
               ElseIf Trim(Combo7) = "无号" Then
                  Text19.Text = "GD-WH2008" + i0
               End If
           ElseIf rs0.RecordCount <= 0 Then
               MsgBox "请输入起始订单号!"
               Text19.Enabled = True
               Text19.SetFocus
            End If
         rs0.Close偶设置的是combo7的lostfocus事件.
    产品统计表中有如下字段:
    订单号,订货单位,指定书号,产品名称,是否加印,机型选择,产品类别,成品开数,成品尺寸,色别,班印数,班印张,班总印数,总印数,总印张,印刷工艺,印刷开数,印次,令数,色令数,上版数量,补版数量,费用总计,用纸类别,用纸数量,备注,印刷机组,印刷班组,完工日期
    实在搞不懂了,还请大家不吝指教啊!
      

  6.   

    对了,      
     ElseIf rs0.RecordCount  <= 0 Then 
               MsgBox "请输入起始订单号!" 
               Text19.Enabled = True 
               Text19.SetFocus 
     End If
    这段也有错,偶是想当检测到系统第一次运行时,先输入起始订单号,以后再运行时,订单号可以自动生成的.但这段代码好象不起作用啊. 
      

  7.   

    你用的是sql server吧?那个sumstring应该是substring吧
    不过即使是substring也不对啊,从第10个字符开始往后取四个字符,你上面的订单号字段没有14个字符吧
    另外一个就是你的数据约定不规范,最好把gd--jy20089改为gd--jy200809
      

  8.   

    嗯 ,不好意思打错了,是substring.
      

  9.   

    help什么?上面已经说了,你的数据很不规范,你试试在sql server中select substring(订单号,10,3,4)看看出来的是什么?
      

  10.   

    select substring(订单号,10,3)

    select substring(订单号,10,4)
      

  11.   

     to  13楼:
          我用select substring(订单号,10,4)试过了,这个本身没问题,可以执行.但我要的是取出它的最大值,用,max(substring(订单号,10,4))取出的值也是9,而不是10,11,等.
    实在没办法了.还请指教!
      

  12.   

    那么当订单号是gd--jy200810和gd--jy20089的时候,你select substring(订单号,10,4)出来的是什么结果??
    如果你一定要这样用,可以试试:
    select top 1 substring(订单号,10,4) order by substring(订单号,10,4)*1 desc;
      

  13.   

    select max(cast(substring(订单号,10,4) as int)) from .....
      

  14.   


    在sql server 2000 中执行测试语句:
    select max(cast(substring('ph2008000001',10,4) as int))
    结果返回1
    如果订单格式固定,以上语句在sql server 2000中查询应该没有问题