以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  SQL外部数据源实现自动编码  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=37929)

--  作者:whuan1027
--  发布时间:2013/7/15 16:46:00
--  SQL外部数据源实现自动编码

      使用SQL外部数据源,想实现物料编码的自动生成,编码没有特殊要求,是无意编码,只要按照顺序生成即可,不能使用表达式列,因为表达式列生成的编码不能保存在数据库中,在表的BeforeSaveDataRow中写了如下的代码:

     

If e.DataRow("物料编码") = "" Then
    Dim cmd As New SQLCommand
    Dim dt As DataTable
    cmd.C   \'设置数据源名称
    cmd.CommandText = "select * from {selfmade} Where [partsnum] is not null"    \'将partsnum不为空的列统计出进行编码
    dt = cmd.ExecuteReader()
    Dim max As String
    Dim idx As Integer
    max = dt.Compute("Max(物料编码)") \'取得最大编号
    If max > "" Then \'如果存在最大编号
        idx = CInt(max.Substring(6)) + 1 \'获得最大编号,并加1
    Else
        idx = 1 \'否则顺序号等于1
    End If
   
    e.DataRow("物料编码") = Format(idx,"000000")
End If

运行后“物料编码”没有变化,还是空值,而且报错:“调用的目标发生了异常。”请问代码哪里有问题呢?另外,有什么简单一点的方法能实现表达式列的编号直接复制到数据列就好了。


--  作者:whuan1027
--  发布时间:2013/7/15 16:47:00
--  

有一句代码没复制全   cmd.C \'设置数据源名称


--  作者:Bin
--  发布时间:2013/7/15 16:53:00
--  
这个你最好能提供一下例子,才能帮你解决问题. 纸上谈兵这种情况恐怕很难解决问题.
--  作者:狐狸爸爸
--  发布时间:2013/7/15 17:15:00
--  

取最大值,不需要这大费周章,你看看:

 

ExecuteScalar

 

用于执行返回单个值的命令,例如:

Dim 
ld As Date
Dim 
cmd As New SQLCommand
cmd.CommandText = 
"Select Max(日期) From {订单} Where 产品 = \'PD01\'"

ld = cmd.ExecuteScalar()

 

上面的代码得到最后一次有人订购PD01的日期,并保存在变量ld中。

 

 

 


--  作者:whuan1027
--  发布时间:2013/7/15 17:18:00
--  

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.rar


--  作者:狐狸爸爸
--  发布时间:2013/7/15 17:22:00
--  
If e.DataRow("物料编码") = "" Then
    Dim cmd As New SQLCommand
    Dim max As String
    Dim idx As Integer
    cmd.Connection Name = "数据元"   \'设置数据源名称
    cmd.CommandText = "select Max(物料编码) from {selfmade} Where [partsnum] is not null"    \'将partsnum不为空的列统计出进行编码
    max = cmd.ExecuteScalar
    If max > "" Then \'如果存在最大编号
        idx = cint(max)
    Else
        idx = 1 \'否则顺序号等于1
    End If
    e.DataRow("物料编码") = Format(idx,"000000")
End If
 

--  作者:狐狸爸爸
--  发布时间:2013/7/15 17:48:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目944.foxdb


--  作者:whuan1027
--  发布时间:2013/7/16 11:00:00
--  
非常感谢狐爸,问题解决了!不过那句idx = cint(max)应该是idx = cint(max)+1,呵呵
--  作者:whuan1027
--  发布时间:2013/7/16 17:52:00
--  外部数据源编码问题

狐爸:

     管理项目944有一个问题:在当时保存时编码是自动生成的没有问题,可是 cmd.CommandText = "update {selfmade} Set [零部件_物料编码] = \'" & Format(idx,"000000") & "\'"代码运行后将所有的代码都更新为最大的编码了,而不是保存之前的顺序的编码了。但是如果不即时将最大编码写入数据库后,在当前表中添加数据时,会出现编码不是从现有最大编码开始顺序增加的,这要怎么解决呢?比如你那个项目测试后所有数据的“物料编码”都变成000002了。


--  作者:Bin
--  发布时间:2013/7/16 17:54:00
--  
修改一行保存一行.