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


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

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

帅哥哟,离线,有人找我吗?
unverse
  11楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1085 积分:8220 威望:0 精华:4 注册:2012/3/31 18:08:00
  发帖心情 Post By:2012/10/31 22:13:00 [只看该作者]

楼主是在开发档案管理软件 吗?开发的咋样了,弄上来晒晒图嘛。我最近也在搞这东西。。


 回到顶部
帅哥哟,离线,有人找我吗?
云淡风轻
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | 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呢?请问怎么修改呢?

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/11/2 10:30:00 [只看该作者]

 DataTable不是你的数据库,只是你数据库的一个子集。而且,dataTable在未保存之前,都不会把数据写入数据库。

 这种问题,解决的方法,是需要编写SQL,去查询数据库最大值,然后编号,然后存储。

 http://www.foxtable.com/help/topics/1994.htm

 回到顶部
帅哥哟,离线,有人找我吗?
云淡风轻
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/11/2 14:09:00 [只看该作者]

 楼主,这句代码……

 If e.DataRow("分类号") = 4 Then

 你还希望怎么修改?

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


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

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

 

 

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

 

通过修改SQL怎么生成不了

 

难道datacolchanged里不能编SQL

 

帮我测试下


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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/11/2 14:52:00 [只看该作者]

 楼主,这是最后的代码。

Dim idx As String
Dim czh As String = ""
Dim dt As DataTable
Dim cmd As New SQLCommand
cmd.C '设置数据源名称

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("分类号") = 4 Then
                czh = e.DataRow("全宗号") & "-" & e.DataRow("年度") & "-%"
                cmd.commandText = "Select max(存址号) From [test] Where 存址号 like '" & czh & "' And Id <> " & e.DataRow("id")
                idx = cmd.ExecuteScalar
                If idx = "" Then
                    idx = 10001
                Else
                    idx = idx.SubString(9) + 1
                End If
                e.DataRow("存址号") = e.DataRow("全宗号") & "-" & e.DataRow("年度") & "-" & idx
            Else
                e.DataRow("存址号") = "不存在"
            End If
        End If
    Case "存址号"
        e.DataTable.Save()
End Select

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


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

衷心感谢楼上!

 

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

 

 

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

 

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
云淡风轻
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | 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


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


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

我仔细想了想,如果编辑已经生成某已经生成存址号的行,比如把分类号4改成9,那么存址号就自动填入“不存在”,又把9改回4,生成的存址号又不是原来的,就错了,而我们实际工作中分类号是4的存址号生成好后就不能再变。可难免这种不小心的操作,而且又不能输完就锁定行,有可能有修改其他字段的需要,怎么解决好?

 回到顶部
总数 23 上一页 1 2 3 下一页