以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]自动编号,还是有误  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=29998)

--  作者:annliu
--  发布时间:2013/3/18 21:26:00
--  [求助]自动编号,还是有误

If e.DataCol.Name = "入库日期" Then
    If e.DataRow("入库日期") <> Nothing  Then
        Dim bh As String = Format(e.DataRow("入库日期"),"yyyyMMdd") \'取得编号的8位前缀
        If e.DataRow("入库单号").StartsWith("R"&bh) = False \'如果编号的前6位不符
            Dim cmd As New SQLCommand
            Dim dt As DataTable
            cmd.C
            cmd.CommandText = "Select * From {成品入库表} where ( 入库日期 ="\'"e.DataRow( "入库日期") "\'") "
            dt = cmd.ExecuteReader()
            Dim max As String
            Dim idx As Integer
            max = dt.Compute ("Max(入库单号)","入库日期 = # " & e.DataRow("入库日期") & " # ")
            \'(下单日期 >= #" & fd & "# And 下单日期 <= #" & ld & "#) or (编号) like \'" & bh & "%\'") \'取得该月的最大编号
            If max > "" Then \'如果存在最大编号
                idx = CInt(max.Substring(11,2)) + 1 \'获得最大编号的后三位顺序号,并加1
            Else
                idx = 1 \'否则顺序号等于1
            End If
            e.DataRow("编号") = "R" & bh & Format(idx,"00")
            e.DataRow.save
        End If
    End If
End If

 

狐爸,请帮我看看自动编号的问题,谢谢。提示“=” 附近有错误。可能是这句的问题。

 cmd.CommandText = "Select * From {成品入库表} where ( 入库日期 ="\'"e.DataRow( "入库日期") "\'") "
dt = cmd.ExecuteReader()

 

 

[此贴子已经被作者于2013-3-19 9:05:26编辑过]

--  作者:yinyb36
--  发布时间:2013/3/19 5:39:00
--  
cmd.CommandText = "Select * From {成品入库表} where 入库日期 = #" & e.DataRow( "入库日期") & "#"

--  作者:annliu
--  发布时间:2013/3/19 9:05:00
--  

不对的,这样改过后还是有语法错误,“#”附近有语法错误。


--  作者:annliu
--  发布时间:2013/3/19 13:26:00
--  

不对的,这样改过后还是有语法错误,“#”附近有语法错误。


--  作者:hanxuntx
--  发布时间:2013/3/19 13:31:00
--  

把 # 号 改成‘ 单引号


--  作者:annliu
--  发布时间:2013/3/19 14:12:00
--  

还是有误,求大侠指点。

改成单引后,重置入库日期列,第一行可以

第二个就不行了

 

.NET Framework 版本:2.0.50727.4984
Foxtable 版本:2012.11.29.1
错误所在事件:表,成品入库表, DataColChanged
详细错误信息:
System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。
参数名: length
   在 System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy)
   在 UserCode.DataColChanged(DataColEventArgs e)
   --- 内部异常堆栈跟踪的结尾 ---
   在 System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   在 System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   在 Foxtable.DataTable.O0O1Oll00011OlO0(DataCol OO)

 


--  作者:狐狸爸爸
--  发布时间:2013/3/19 14:28:00
--  

问题可能出在这一行:

 

idx = CInt(max.Substring(11,2)) + 1 \'获得最大编号的后三位顺序号,并加1

 

你的编号是: R + 8位数的年月日 + 两位数的编号,合计11个字符

 

所以最后两个应该是从第十个字符开始,也就是编号9开始,改为:

 

idx = CInt(max.Substring(9,2)) + 1 \'获得最大编号的后三位顺序号,并加1

 

 


--  作者:annliu
--  发布时间:2013/3/19 14:41:00
--  

找到原因了,改好了,谢谢各位!