以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 网络环境下的复杂编号,是还有别的什么设置吗?不停的循环停止不了? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=46573) |
||
-- 作者:小刚 -- 发布时间:2014/2/25 19:53:00 -- 网络环境下的复杂编号,是还有别的什么设置吗?不停的循环停止不了? 我按照帮助里面说的,在原来的外部数据源里面增加了一个编号的表,但是执行新增之后,却发现步骤1执行了,步骤2却不停的循环,退不出来,最后程序死机. 不知道是那里没有设置对吗? 网络环境下的复杂编号 普通用户可以忽略本节内容。 使用自动增量主键,例如_Identify列,能够有效解决编号的问题,即使是多人同时向一个表中增加行,也不会出现重复的编号。 本节的例子使用外部数据源,数据源文件为CaseStudy目录下的文件:编号.mdb 设计步骤: 1、因为订单表的编号列是主键列,所以在任何时候都不能为空,必须在增加行的时候,为新增行生成一个临时的编号,为此我们将订单表的DataRowAdding事件设置为: Static Index As
Integer = 99999 和正式的编号不同,临时编号的顺序号为5位,而且是从99999开始倒序编号,这样用户一看就知道这是临时的编号。 2、在保存的时候,为新增的行生成正式的编号,BeforeSaveDataRow事件代码设置为:
第10行代码获得编号的前缀(由两位年两位月组成),第17、18行代码判断编号表是否存在此前缀的记录,如果不存在,第19、20行代码则增加此前缀的记录,并将顺序号设置为1。 多表编号 |
||
-- 作者:小刚 -- 发布时间:2014/2/25 20:11:00 -- MessageBox.Show(cmd2.ExecuteNonQuery) 答案是 1 那么就应该退出循环了啊 但是就是退不出来 搞不清楚是那里设置出了问题
|
||
-- 作者:小刚 -- 发布时间:2014/2/25 20:18:00 -- Do Key = cmd1.ExecuteScalar() \'从后台获得顺序号 cmd2.commandText = "Update [编号] Set [顺序号] = " & (Key + 1) & " Where [顺序号] = " & Key & " And [前缀] = \'" & pf & "\'" MessageBox.Show(cmd2.ExecuteNonQuery) 此时值为 1 If cmd2.ExecuteNonQuery() > 0 Then \'更新顺序号 MessageBox.Show(cmd2.ExecuteNonQuery) 此时值为0 Exit Do \'更新成功则退出循环 End If Loop 按道理该退出了,却不退出,无限次的在循环...
|
||
-- 作者:小刚 -- 发布时间:2014/2/25 20:40:00 -- 哦 我的订单表的编号列不是主键列,是这个原因吗?就是一个新建的字符列。 |
||
-- 作者:有点甜 -- 发布时间:2014/2/25 20:40:00 -- 改成这样,不要重复执行ExecuteNonQuery
|
||
-- 作者:小刚 -- 发布时间:2014/2/25 21:16:00 -- 奇了怪了,我新建了一个例子准备上传,测试却是OK的,我原来的数据表,一模一样的设置和代码,却循环个没完没了,直到程序死了.真是纳闷. |
||
-- 作者:有点甜 -- 发布时间:2014/2/25 22:51:00 -- 呵呵,慢慢调试呗。记得不要重复执行 ExecuteNonQuery cmd2.ExecuteNonQuery() 返回的值,是影响的行数,如果数据是相同的话,就返回0 你这里就是重复执行了,得到的值,都是0的,cmd2.ExecuteNonQuery()
|