Foxtable(狐表)用户栏目专家坐堂 → SQL外部数据源实现自动编码


  共有4887人关注过本帖树形打印复制链接

主题:SQL外部数据源实现自动编码

美女呀,离线,留言给我吧!
whuan1027
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:88 积分:967 威望:0 精华:0 注册:2011/12/2 16:00:00
SQL外部数据源实现自动编码  发帖心情 Post By:2013/7/15 16:46:00 [只看该作者]

      使用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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:88 积分:967 威望:0 精华:0 注册:2011/12/2 16:00:00
  发帖心情 Post By:2013/7/15 16:47:00 [只看该作者]

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


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/7/15 16:53:00 [只看该作者]

这个你最好能提供一下例子,才能帮你解决问题. 纸上谈兵这种情况恐怕很难解决问题.

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:88 积分:967 威望:0 精华:0 注册:2011/12/2 16:00:00
  发帖心情 Post By:2013/7/15 17:18:00 [只看该作者]

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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
 

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/7/15 17:48:00 [只看该作者]

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


 回到顶部
美女呀,离线,留言给我吧!
whuan1027
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:88 积分:967 威望:0 精华:0 注册:2011/12/2 16:00:00
  发帖心情 Post By:2013/7/16 11:00:00 [只看该作者]

非常感谢狐爸,问题解决了!不过那句idx = cint(max)应该是idx = cint(max)+1,呵呵

 回到顶部
美女呀,离线,留言给我吧!
whuan1027
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:88 积分:967 威望:0 精华:0 注册:2011/12/2 16:00:00
外部数据源编码问题  发帖心情 Post By:2013/7/16 17:52:00 [只看该作者]

狐爸:

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


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/7/16 17:54:00 [只看该作者]

修改一行保存一行.

 回到顶部
总数 18 1 2 下一页