高手请进!实在是解决不了,急求助!!

时间:2020-11-28 18:38:06
一个关于编号的问题,困扰了我一个多月还是没弄懂,请高手求助!

订单ID:编码规则为固定字段“DD-”+订单生成日期年月日字段“050328”(其中“050328”表示2005年3月28号)+自动递增字段“000”,格式如"DD-050328001"

其中,最难的是对日期的判断:如今天无订单则"自动递增字段"为"000"+1,否则为今天所有订单中最大的那个尾数+1.

求!!!!!!!!!!!!!!!!!!!!!!!!!!!

19 个解决方案

#1


'订单应该有个单据日期吧
'参考以下代码,将字段和表改为自己的内容

  Dim R As New ADODB.Recordset
  Dim 单据数 As Long
  Dim 单据编号 As String 
  R.Open "Select count(订单日期) from 订单 订单日期=#" & Date & "#"
  单据数=R(0)   '单据数量,如果没有单据则为0,如果有单据则为今天单据的总数
  R.Close
  单据编号="DD" & "......" & Format(单据号+1,"000")

#2


Dim R As New ADODB.Recordset
这一句不懂,能不能解说得详细一点!

是不是可以先用DLookup找出今天有没有订单,如无则为0,如有则用DMax找出今天尾数最大的ID号,然后再加1为新编号,但我不知道怎样写这代码,因为DMax有两个判断条件:1、日期是今天;2、在今天的订单中找出尾数最大的订单.

#3


Private Sub cmdSave_Click()
    If i = 1 Then
        Dim strMax As String
        If IsNull(DLookup("[SOrderID]", "tblSorder", "SOrderStartDate" = "#" & Date & "#")) Then
        strMax = 0
        Else
        strMax = DCount("[SOrderID]", "tblsorder", "SOrderStartDate" = "#" & Date & "#")
        End If
        Me![SOrderID] = Format(Date, "yymmdd") & Format(strMax + 1, "000")
    
    ElseIf i = 2 Then
    Me.SOrderID.Locked = True
    End If
        
    Me.Caption = "保存"
    Call StateR
    Me.RecordsetType = conSnapshot

   End Sub

#4


晕啊,难到你是说在 Access 里面的VBA操作,怎么不说清楚
r 是打开一个 ADO 的数据集,在Access 里面也可以定义数据集,不过你如果硬要用
Access 的方法 DLookup 这个冬冬我不太会用
不过如果可以执行Sql 语句也可以 ,关键是这一句:Select count(订单日期) from 订单 订单日期=#" & Date & "#"
取出今天已有订单的数量,

#5


以上代码错在哪里,请指正!
其中i是判断是新增还是修改的变量,SOrderStartDate为订单日期,SOrderID为订单号,tblSorder为订单表,strMax为今天订单数!
够详细了吧!

#6


对啊!我全部是在access里做的,小弟不是科班出身,大大的菜鸟!请帮小弟将代码改好。
比如:怎样将Select count(订单日期) from 订单 订单日期=#" & Date & "#"写到access里的VBA中

#7


为此我整整搞了一个多月,还是没搞懂啊!!!
急!!!!!!!!

#8


那你用DCount 吧
直接用DCount 就可以

Private Sub cmdSave_Click()
    If i = 1 Then
        Dim lngMax As Long
        lngMax = DCount("[SOrderID]", "tblsorder", "SOrderStartDate" = "#" & Date & "#")
        Me![SOrderID] = Format(Date, "yymmdd") & Format(lngMax + 1, "000")
    
    ElseIf i = 2 Then
    Me.SOrderID.Locked = True
    End If
        
    Me.Caption = "保存"
    Call StateR
    Me.RecordsetType = conSnapshot

   End Sub

#9


老大,不行啊!
第一个还可以,但再加一个就弹出错误了:您输入的值不符合为字段或控件所定义的有效性规则。

不知道是什么原因

#10


哪一句出的错

#11


SOrderID  是不是有定义什么规则,你把规则去掉或看看生成的字符串有什么地方与规则冲突

#12


我也不知道啊!
我感觉是这一句:"SOrderStartDate" = "#" & Date & "#"

#13


SOrderStartDate它的值是MSCAL.Calendar.7取出来的,格式为2004-4-19

#14


这一句 : "SOrderStartDate" = "#" & Date & "#"

换成 "SOrderStartDate =#" & Date & "#"

Private Sub cmdSave_Click()
    If i = 1 Then
        Dim lngMax As Long
        lngMax = DCount("[SOrderID]", "tblsorder", "SOrderStartDate =#" & Date & "#")
        Me![SOrderID] = Format(Date, "yymmdd") & Format(lngMax + 1, "000")
    
    ElseIf i = 2 Then
    Me.SOrderID.Locked = True
    End If
        
    Me.Caption = "保存"
    Call StateR
    Me.RecordsetType = conSnapshot

   End Sub

#15


老大,可以了,真是谢谢

#16


那两句代码有什么区别啊

#17


那一句有语法错误的,你自己输错的,我没用调试器,所以没注意

#18


知其然,亦要知其所以然!
明天等着收分!60分全归你!
谢谢你的顶力相助!

#19


能加你为好友吗?
继续学习!

#1


'订单应该有个单据日期吧
'参考以下代码,将字段和表改为自己的内容

  Dim R As New ADODB.Recordset
  Dim 单据数 As Long
  Dim 单据编号 As String 
  R.Open "Select count(订单日期) from 订单 订单日期=#" & Date & "#"
  单据数=R(0)   '单据数量,如果没有单据则为0,如果有单据则为今天单据的总数
  R.Close
  单据编号="DD" & "......" & Format(单据号+1,"000")

#2


Dim R As New ADODB.Recordset
这一句不懂,能不能解说得详细一点!

是不是可以先用DLookup找出今天有没有订单,如无则为0,如有则用DMax找出今天尾数最大的ID号,然后再加1为新编号,但我不知道怎样写这代码,因为DMax有两个判断条件:1、日期是今天;2、在今天的订单中找出尾数最大的订单.

#3


Private Sub cmdSave_Click()
    If i = 1 Then
        Dim strMax As String
        If IsNull(DLookup("[SOrderID]", "tblSorder", "SOrderStartDate" = "#" & Date & "#")) Then
        strMax = 0
        Else
        strMax = DCount("[SOrderID]", "tblsorder", "SOrderStartDate" = "#" & Date & "#")
        End If
        Me![SOrderID] = Format(Date, "yymmdd") & Format(strMax + 1, "000")
    
    ElseIf i = 2 Then
    Me.SOrderID.Locked = True
    End If
        
    Me.Caption = "保存"
    Call StateR
    Me.RecordsetType = conSnapshot

   End Sub

#4


晕啊,难到你是说在 Access 里面的VBA操作,怎么不说清楚
r 是打开一个 ADO 的数据集,在Access 里面也可以定义数据集,不过你如果硬要用
Access 的方法 DLookup 这个冬冬我不太会用
不过如果可以执行Sql 语句也可以 ,关键是这一句:Select count(订单日期) from 订单 订单日期=#" & Date & "#"
取出今天已有订单的数量,

#5


以上代码错在哪里,请指正!
其中i是判断是新增还是修改的变量,SOrderStartDate为订单日期,SOrderID为订单号,tblSorder为订单表,strMax为今天订单数!
够详细了吧!

#6


对啊!我全部是在access里做的,小弟不是科班出身,大大的菜鸟!请帮小弟将代码改好。
比如:怎样将Select count(订单日期) from 订单 订单日期=#" & Date & "#"写到access里的VBA中

#7


为此我整整搞了一个多月,还是没搞懂啊!!!
急!!!!!!!!

#8


那你用DCount 吧
直接用DCount 就可以

Private Sub cmdSave_Click()
    If i = 1 Then
        Dim lngMax As Long
        lngMax = DCount("[SOrderID]", "tblsorder", "SOrderStartDate" = "#" & Date & "#")
        Me![SOrderID] = Format(Date, "yymmdd") & Format(lngMax + 1, "000")
    
    ElseIf i = 2 Then
    Me.SOrderID.Locked = True
    End If
        
    Me.Caption = "保存"
    Call StateR
    Me.RecordsetType = conSnapshot

   End Sub

#9


老大,不行啊!
第一个还可以,但再加一个就弹出错误了:您输入的值不符合为字段或控件所定义的有效性规则。

不知道是什么原因

#10


哪一句出的错

#11


SOrderID  是不是有定义什么规则,你把规则去掉或看看生成的字符串有什么地方与规则冲突

#12


我也不知道啊!
我感觉是这一句:"SOrderStartDate" = "#" & Date & "#"

#13


SOrderStartDate它的值是MSCAL.Calendar.7取出来的,格式为2004-4-19

#14


这一句 : "SOrderStartDate" = "#" & Date & "#"

换成 "SOrderStartDate =#" & Date & "#"

Private Sub cmdSave_Click()
    If i = 1 Then
        Dim lngMax As Long
        lngMax = DCount("[SOrderID]", "tblsorder", "SOrderStartDate =#" & Date & "#")
        Me![SOrderID] = Format(Date, "yymmdd") & Format(lngMax + 1, "000")
    
    ElseIf i = 2 Then
    Me.SOrderID.Locked = True
    End If
        
    Me.Caption = "保存"
    Call StateR
    Me.RecordsetType = conSnapshot

   End Sub

#15


老大,可以了,真是谢谢

#16


那两句代码有什么区别啊

#17


那一句有语法错误的,你自己输错的,我没用调试器,所以没注意

#18


知其然,亦要知其所以然!
明天等着收分!60分全归你!
谢谢你的顶力相助!

#19


能加你为好友吗?
继续学习!

#20