请教诸位。
偶在vb 中需要设置一个订单号,要求如下:
一,第一次运行程序时,需要设置一个起始值。
二,以后运行程序时,订单号会自动递加值1,比如,1,2,3,4.......并在文本框中显示。
三,格式可以自己设置比如是 gh200800001之类的。
四,订单号可以保存到sql 中的。
偶在vb 中需要设置一个订单号,要求如下:
一,第一次运行程序时,需要设置一个起始值。
二,以后运行程序时,订单号会自动递加值1,比如,1,2,3,4.......并在文本框中显示。
三,格式可以自己设置比如是 gh200800001之类的。
四,订单号可以保存到sql 中的。
每次取最后一个ID,然后"订单号=gh+ID+1"
现在我用的是 max(sumstring(订单号,10,34))函数取出最大值,然后递加1的.可是当累加到gd-jy200810的时侯,就出错了,好象是max(sumstring(订单号,10,3))函数取出的最大值是9,而取不到10的.请教达人,为什么是这样呢?
rs!ID = "gd-jy" & int1
rs.update
rs.close
以上为简短代码,请自己扩充为完整代码。
这个办法试了试可以,只是感觉还是欠周密,还有什么办法可以取出最大值呢?max函数是怎么比较呢?比如gd--jy200810和 gd--jy20089为什么max(sumstring(订单号,10,4))比较时是后者值最大呢?
敬请指教!
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事件.
产品统计表中有如下字段:
订单号,订货单位,指定书号,产品名称,是否加印,机型选择,产品类别,成品开数,成品尺寸,色别,班印数,班印张,班总印数,总印数,总印张,印刷工艺,印刷开数,印次,令数,色令数,上版数量,补版数量,费用总计,用纸类别,用纸数量,备注,印刷机组,印刷班组,完工日期
实在搞不懂了,还请大家不吝指教啊!
ElseIf rs0.RecordCount <= 0 Then
MsgBox "请输入起始订单号!"
Text19.Enabled = True
Text19.SetFocus
End If
这段也有错,偶是想当检测到系统第一次运行时,先输入起始订单号,以后再运行时,订单号可以自动生成的.但这段代码好象不起作用啊.
不过即使是substring也不对啊,从第10个字符开始往后取四个字符,你上面的订单号字段没有14个字符吧
另外一个就是你的数据约定不规范,最好把gd--jy20089改为gd--jy200809
或
select substring(订单号,10,4)
我用select substring(订单号,10,4)试过了,这个本身没问题,可以执行.但我要的是取出它的最大值,用,max(substring(订单号,10,4))取出的值也是9,而不是10,11,等.
实在没办法了.还请指教!
如果你一定要这样用,可以试试:
select top 1 substring(订单号,10,4) order by substring(订单号,10,4)*1 desc;
在sql server 2000 中执行测试语句:
select max(cast(substring('ph2008000001',10,4) as int))
结果返回1
如果订单格式固定,以上语句在sql server 2000中查询应该没有问题