Foxtable(狐表)用户栏目专家坐堂 → 关于网络编号的问题


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

主题:关于网络编号的问题

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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/11/3 7:56:00 [显示全部帖子]

你测试帮助提供的例子,看看是否有这个问题。

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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/11/3 8:24:00 [显示全部帖子]

原来的代码中有如下加粗的一行,按道理对于已经保存的行或者非新增行,不会有任何影响的:

 

Dim dr As DataRow = e.DataRow
Dim pf As String
If dr.RowState <> DataRowState.Added Then '如果不是新增行
    Return '那么返回
ElseIf dr.IsNull("日期") Then '如果没有输入日期
    e.Cancel = True '取消保存此行
    MessageBox.Show("必须输入日期!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Return
Else
    pf = Format(dr("日期"),"yyMM") '否则获得编号的前缀,两位年,两位月
End If


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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/11/3 8:36:00 [显示全部帖子]

如果简单地去掉,等于每次保存,修改过其他列,但是日期没有修改的行,也会重新编号。

你可以判断日期是否修改过,才决定是否重新生成编号:

 

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

 


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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/11/3 8:54:00 [显示全部帖子]

看10楼

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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/11/3 9:10:00 [显示全部帖子]

如果不是新增行,就判断日期的当前值和原始值是否相同,如果相同就return

 

将下面这段代码:

 

Dim dr As DataRow = e.DataRow
Dim pf As String
If dr.RowState <> DataRowState.Added Then '如果不是新增行
    Return '那么返回
ElseIf dr.IsNull("日期") Then '如果没有输入日期
    e.Cancel = True '取消保存此行
    MessageBox.Show("必须输入日期!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Return
Else
    pf = Format(dr("日期"),"yyMM") '否则获得编号的前缀,两位年,两位月
End If

 

改为:

 

Dim dr As DataRow = e.DataRow
Dim pf As String
If dr.RowState <> DataRowState.Added Then '如果不是新增行
    If e.DataRow("日期") = e.DataRow.OriginalValue("日期") Then '而且日期没有修改
        Return '那么返回
    End If
End If
If dr.IsNull("日期") Then '如果没有输入日期
    e.Cancel = True '取消保存此行
    MessageBox.Show("必须输入日期!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Return '返回
End If
pf = Format(dr("日期"),"yyMM") '否则获得编号的前缀,两位年,两位月

[此贴子已经被作者于2011-11-3 9:10:26编辑过]

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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/11/3 9:54:00 [显示全部帖子]

示例是针对单个表,就是那个订单表,没有区分多个表的。

 

要多个表,就修改编号表的结构,增加一个表名列。

再修改你的代码,加上表名的条件。


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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/11/3 11:44:00 [显示全部帖子]

例如:
cmd1.commandText = "Select [顺序号] From [编号] Where [前缀] = '" & pf & "'"
 
应该改为:
 
cmd1.commandText = "Select [顺序号] From [编号] Where [前缀] = '" & pf & "' And [表名] = '订单'"

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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/11/4 8:16:00 [显示全部帖子]

你肯定那里搞错了,事件代码,不管你从那里增加行,都会触发事件。

 


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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/11/4 9:19:00 [显示全部帖子]

我无法理解你的问题,你用foxtable自带的实例,再别的表新建一个窗口,加入一个按钮,按钮代码:

 

Tables("表名").AddNew()

Tables("表名").Save()


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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/11/4 10:14:00 [显示全部帖子]

提示:

 

代码中不应该出现CurrentTable这样的,CurrentTable表示当前表,并不一定就是触发事件的Table或DataTable。

你的代码有不少这种不严谨的地方,例如:

 

pd = CurrentTable.Name

 

 

最好全面彻查你所有的代码,不单单是这个编号的代码。

事件代码有e参数,要善用e参数,通过e参数获得触发事件的表、列、行,而不是用CurrentTable和Current这样。

[此贴子已经被作者于2011-11-4 10:19:01编辑过]

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