Foxtable(狐表)用户栏目专家坐堂 → [求助]流水号自动生成问题


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

主题:[求助]流水号自动生成问题

帅哥哟,离线,有人找我吗?
云淡风轻
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:409 积分:3022 威望:0 精华:0 注册:2012/1/19 10:11:00
[求助]流水号自动生成问题  发帖心情 Post By:2012/10/30 16:48:00 [显示全部帖子]

情况说明:

数据库中“全宗号”列的数值从1,2,3,4,5中取,分类号的值从0,1,2,3,4,5,6中取值,“年度”列的值是4位数,如2005,2006等,那么对于分类号是0,2,3的行,如何自动生成流水号列“存址号”列,其形式为“全宗号-年度-10001开始的递增数”,即形式为1-2005-10001,1-2005-10002,...,1-2005-10554,...,如果输入的年度以前没有输过的,比如新的年度2006,那么流水号又从10001开始,即1-2006-10001,1-2006-10002,...以此递增。

 

如何代码实现自动生成流水号?谢谢!

 

附数据:

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

[此贴子已经被作者于2012-10-30 16:48:46编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
云淡风轻
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:409 积分:3022 威望:0 精华:0 注册:2012/1/19 10:11:00
  发帖心情 Post By:2012/10/31 16:18:00 [显示全部帖子]

谢谢指点!还想请教下,如果全宗号是X01,X02,X03,X04,X05时,流水号如X01-2005-10004形式的,怎么修改呢?因为此时e.DataTable.Compute("Max(存址号)", "全宗号 = " & e.DataRow("全宗号") & " And 年度 = " & e.DataRow("年度") & " And 分类号 in (0,2,3) And _Identify <> " & e.DataRow("_Identify"))代码,运行弹出调用的目标异常的错误,如何修改?谢谢!不同的全宗号,分类号是0,2,3,如果年度相同的话,流水号是重新编的,又从10001开始。所以在筛选里把全宗号 = " & e.DataRow("全宗号") 这个加上了

[此贴子已经被作者于2012-10-31 16:38:55编辑过]

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


加好友 发短信
等级:一尾狐 帖子:409 积分:3022 威望:0 精华:0 注册:2012/1/19 10:11:00
  发帖心情 Post By:2012/10/31 16:40:00 [显示全部帖子]

嗯,我也这样想,可是增加行的时候报错了。怎么办?

Dim idx As String = e.DataTable.Compute("Max(存址号)", "全宗号 = '" & e.DataRow("全宗号") & "' And 年度 = " & e.DataRow("年度") & " And 分类号 in (0,2,3) And _Identify <> " & e.DataRow("_Identify"))

 

 

这个语句对于X01-2005-10001,X01-2005-10002,...,...

好像没有办法判断最大值,因为其中有X字母,不知是不是这样?

[此贴子已经被作者于2012-10-31 16:41:57编辑过]

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


加好友 发短信
等级:一尾狐 帖子:409 积分:3022 威望:0 精华:0 注册:2012/1/19 10:11:00
  发帖心情 Post By:2012/10/31 16:57:00 [显示全部帖子]

还是不行。

 

我测试时改成

 

Select Case e.DataCol.Name
    Case "全宗号", "年度", "分类号"
        If e.DataRow.IsNull("全宗号") = False AndAlso e.DataRow.IsNull("分类号") = False AndAlso e.DataRow.IsNull("年度") = False  Then
            If e.DataRow("分类号") = 0 OrElse e.DataRow("分类号") = 2 OrElse e.DataRow("分类号") = 3 Then
                Dim idx As String = e.DataTable.Compute("Max(存址号)", "全宗号 = " & e.DataRow("全宗号") & " And 年度 = " & e.DataRow("年度") & " And 分类号 in (0,2,3) And _Identify <> " & e.DataRow("_Identify"))
                messagebox.show(idx)
            End If
        End If
End Select

弹出“调用的目标发生异常”错误。

说明idx值有问题

[此贴子已经被作者于2012-10-31 17:00:36编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
云淡风轻
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:409 积分:3022 威望:0 精华:0 注册:2012/1/19 10:11:00
  发帖心情 Post By:2012/10/31 17:05:00 [显示全部帖子]

谢谢!!!一语中的,大侠!!

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


加好友 发短信
等级:一尾狐 帖子:409 积分:3022 威望:0 精华:0 注册:2012/1/19 10:11:00
  发帖心情 Post By:2012/11/2 10:24:00 [显示全部帖子]

你好,我的数据是做成动态加载的,测试后,发现e.DataTable.Compute(max(存址号))最大值只对当前已加载的数据进行遍历,比如我现在的数据库中有存址号X01-2005-10001,X01-2005-10002。那我重新打开系统,因为动态加载,数据表均为空,此时增加行,再输2005年度的,还是从X01-2005-10001,X01-2005-10002开始编,而不是接下去从10003开始编,如果两个人分别操作两台电脑上的软件,也不会续编。我觉得主要是没有从后台数据库中的表中遍历,只对当前看得见的这部分数据中去遍历。但是既然已经是e.DataTable.,那应该就是从后台数据库中读取的吧,怎么感觉是tables而不是DataTable呢?请问怎么修改呢?

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


加好友 发短信
等级:一尾狐 帖子:409 积分:3022 威望:0 精华:0 注册:2012/1/19 10:11:00
  发帖心情 Post By:2012/11/2 13:53:00 [显示全部帖子]

现在只对分类号是4的生成流水号,不知错在何处,附项目

请高手帮我修改,谢谢!

 

 

 

 

 

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

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

 

                For Each t As DataRow In dt.DataRows
                    idx = t("存址号")
                Next

 

 

实际上我想获取表的第一行第一列

 

但datatable的代码找不到

[此贴子已经被作者于2012-11-2 13:54:54编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
云淡风轻
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:409 积分:3022 威望:0 精华:0 注册:2012/1/19 10:11:00
  发帖心情 Post By:2012/11/2 14:22:00 [显示全部帖子]

只对分类号是4的进行生成流水号

 

 

现在我在项目里的代码无法生成流水号

 

通过修改SQL怎么生成不了

 

难道datacolchanged里不能编SQL

 

帮我测试下


 回到顶部
帅哥哟,离线,有人找我吗?
云淡风轻
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:409 积分:3022 威望:0 精华:0 注册:2012/1/19 10:11:00
  发帖心情 Post By:2012/11/2 15:19:00 [显示全部帖子]

衷心感谢楼上!

 

还有一点补充:就是还要再datarowdeleted中加一句:        e.DataTable.Save()

 

 

防止数据删除后未保存前,由于实际数据库中的存址号并没有删除,编下去的流水号是没有更新的数据库中的数据遍历

 

 

还有我在考虑编辑也会有同样的问题,要是修改分类号,有可能会发生错编的


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


加好友 发短信
等级:一尾狐 帖子:409 积分:3022 威望:0 精华:0 注册:2012/1/19 10:11:00
  发帖心情 Post By:2012/11/2 15:27:00 [显示全部帖子]

提供两种代码,效果相同,这是大家智慧的结晶!

 

以下内容为程序代码:

1 代码一:
2 Dim idx As String
3 Dim czh As String = ""
4 Dim dt As DataTable
5 Dim cmd As New SQLCommand
6 cmd.C '设置数据源名称
7
8 Select Case e.DataCol.Name
9 Case "全宗号", "年度", "分类号"
10 If e.DataRow.IsNull("全宗号") = False AndAlso e.DataRow.IsNull("分类号") = False AndAlso e.DataRow.IsNull("年度") = False Then
11 If e.DataRow("分类号") = 4 Then
12 czh = e.DataRow("全宗号") & "-" & e.DataRow("年度") & "-%"
13 cmd.commandText = "Select Max(存址号) From [S1室藏案卷] Where 存址号 like '" & czh & "' And id <> " & e.DataRow("id")
14 idx = cmd.ExecuteScalar
15 If idx = "" Then
16 idx = 10001
17 Else
18 idx = idx.SubString(13) + 1
19 End If
20 e.DataRow("存址号") = e.DataRow("全宗号") & "-" & e.DataRow("年度") & "-" & idx
21 Else
22 e.DataRow("存址号") = ""
23 End If
24 End If
25 Case "存址号"
26 e.DataTable.Save()
27 End Select
28
29 代码二:
30 Dim idx As String
31 Dim czh As String = ""
32 Dim dt As DataTable
33 Dim cmd As New SQLCommand
34 cmd.C '设置数据源名称
35 Select Case e.DataCol.Name
36 Case "全宗号","分类号","年度"
37 If e.DataRow.IsNull("全宗号") = False AndAlso e.DataRow.IsNull("分类号") = False AndAlso e.DataRow.IsNull("年度") = False Then
38 If e.DataRow("分类号") = 4 Then
39 czh = e.DataRow("全宗号") & "-" & e.DataRow("年度") & "-%"
40 cmd.commandText = "Select Max(存址号) AS 存址号 From [S1室藏案卷] Where 存址号 like '" & czh & "' And id <> '" & e.DataRow("id") & "'"
41 dt = cmd.ExecuteReader()
42 If dt.DataRows.Count = 0 Then
43 idx = ""
44 Else
45 For Each t As DataRow In dt.DataRows
46 idx = t("存址号")
47 Next
48 End If
49
50 If idx = "" Then
51 idx = 10001
52 Else
53 idx = idx.SubString(13) + 1
54 End If
55 e.DataRow("存址号") = e.DataRow("全宗号") & "-" & e.DataRow("年度") & "-" & idx
56 Else
57 e.DataRow("存址号") = ""
58 End If
59 End If
60 Case "存址号"
61 e.DataTable.Save()
62 End Select


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