当前位置:首页教育技巧office技巧office经验

word如何自动生成流水号

2024-07-27 15:42:26


1.怎么生成流水号

目前是在.net中使用的这个方法,使用sqlserver的时间戳来控制并发情况下容易产生重复序列号的问题。

原理类似hibernate的主键生成机制,在系统启动时从数据库中读出最大的流水号,赋给一个类的静态变量,需要时,从该静态变量中取得流水号,加1后,就是你要的值。 代码: public class testA { public static Long maxNo;static {synchronized(maxNo){maxNo = select max(maxNo) from DB;}} public synchronized static long getMaxNo(){return(++maxNo);}} 优点:保证同步,不会取到相同的值,同时避免了数据库的反复读取。

缺点:在cluster环境下 还是用上面的方法,但是只能在一台机器上发布并且绑定到JNDI,别的机器可以通过配置文件得知去哪里产生maxNo(实际上,每台机器都可以发布,但是所有机器只能去访问指定的一台机器),这样的效率虽然低了点,但是还是觉得比每次去数据库里取好点。当然,可以改进,就是再加一个本地类,每次去JNDI那里的类去取数据时,一次取20个回来(就是JNDI上面的类一次要加20),以后本地就用这20个值,用完了,再去JNDI上面的类去取。

当然,前面的这两个例子都比较复杂,甚至还有人提出用单态的方法。而我在.net中用的就比较简单了。

方法如下: 在数据库(sqlserver)中新建一张表(sequence_num),专门用来生成流水号。 字段1:s_id,varchar(50),notnull 字段2:tmstmp,timestamp,notnull 代码如下: public string getOderid() { private SqlConnection conn = null; private SqlCommand comm = null; private string s_id = ""; private byte [] tmstmp;//时间戳类型在.net中对应为一个byte数组 private int s_idplus = 0; private string orderid = ""; try { conn = SqlConn.getConn(); conn.Open(); do { string sqlQuery = "select s_id,tmstmp as tmstmp from sequence_num"; comm = conn.CreateCommand(); comm.CommandText = sqlQuery; SqlDataAdapter da = new SqlDataAdapter(comm); DataTable dt = new DataTable(); dt.Clear(); da.Fill(dt); comm.Parameters.Clear(); if (!dt.Rows[0]["s_id"].ToString().Substring(0,12).Equals(DateTime.Now.ToString("yyyyMMddHHmm")))//每一分钟重置一次计数,实际上我认为每天重置一次比较好 { s_id = DateTime.Now.ToString("yyyyMMddHHmm")+"0001"; tmstmp = (byte[])dt.Rows[0]["tmstmp"]; } else { s_id = dt.Rows[0]["s_id"].ToString(); tmstmp = (byte[])dt.Rows[0]["tmstmp"]; s_idplus = Convert.ToInt32(s_id.Substring(12)) + 1; s_id = s_id.Substring(0,12)+Convert.ToString(s_idplus).PadLeft(4,'0'); } string sqlUpdate = "update sequence_num set s_id = @s_id where tmstmp = @tmstmp";//保证在记录未被修改的情况下更新,如果更新不成功,则重走一遍生成序列号的流程 comm.CommandText = sqlUpdate; comm.Parameters.Clear(); comm.Parameters.Add("@s_id",SqlDbType.VarChar,50); comm.Parameters["@s_id"].Value = s_id; comm.Parameters.Add("@tmstmp",SqlDbType.Timestamp); comm.Parameters["@tmstmp"].Value = tmstmp; } while(comm.ExecuteNonQuery()<=0); } catch(SqlException ex) { string aaa = ex.Message; } finally { if(conn!=null) { conn.Close(); } } return s_id; } 这个流程都是在.net里实现的,实际使用中可以通过存储过程来实现。

当然,这种方法对数据库的访问会比较频繁,另外,数据库表建立的时候必须插入一条初始值,这是代码不完善的地方,有时间的话我会去完善它。只是判断如果表内没有记录的情况下就插入一条初始记录,这个时候如何处理并发问题还没想明白。

2.如何获取自动流水号 用存储过程 求高手

--下面的代码生成长度为8的编号,编号以BH开头,其余6位为流水号。

--得到新编号的函数

CREATE FUNCTION f_NextBH()

RETURNS char(8)

AS

BEGIN

RETURN(SELECT 'BH'+RIGHT(1000001+ISNULL(RIGHT(MAX(BH),6),0),6) FROM tb WITH(XLOCK,PAGLOCK))

END

GO

--在表中应用函数

CREATE TABLE tb(

BH char(8) PRIMARY KEY DEFAULT dbo.f_NextBH(),

col int)

--插入资料

BEGIN TRAN

INSERT tb(col) VALUES(1)

INSERT tb(col) VALUES(2)

INSERT tb(col) VALUES(3)

DELETE tb WHERE col=3

INSERT tb(col) VALUES(4)

INSERT tb(BH,col) VALUES(dbo.f_NextBH(),14)

COMMIT TRAN

--显示结果

SELECT * FROM tb

/*--结果

BH col

---------------- -----------

BH000001 1

BH000002 2

BH000003 4

BH000004 14

--*/

3.word文件怎么使用多级符号对已有的章名,小节名进行自动编号

1、首先在打开的Word文档中选中需要进行多级编号操作的文字内容。

2、然后右键点击该选中的文字,并选择打开选项中的“项目符号和编号”选项。

3、在打开的“项目符号和编号”对话框中选择“多级编号”选项并选择其中需要的编号样式。

4、点击确定即可将选中的文字根据根据标题名与小节名自动进行编号了。

扩展资料

多级符号列表,用于为列表或文档设置层次结构而创建的列表。创建多级符号列表使列表具有复杂的结构。文档最多可有 9 个级别,Microsoft Word 不能对列表中的项目应用内置标题样式。

自动编号,一种特殊的数据规范,在定义Excel模版时使用。Excel表单或报表中经常需要使用序列号,例如,单号、编号,自动编号是指定义一个规则,自动生成所需的序列号。它是一种特殊的数据规范,在定义Excel模版时使用。

流水号名:“自动编号”的名称。在定义模版的数据项时使用。

字头:流水号的统一字头。字头最大20位。

日期部分格式:

无日期部分,例如,XD001

YYMM,年月,例如,0310

YYYYMM,例如,200310

YYMMDD,例如,031022

YYYYMMDD,例如,20031022

顺序号位数:最大10位。

自动编号将与数据规范一样使用。

word中的自动编号是对正文排版时有需要的格式变化,如

1、对正文进行排版,其中:

(1) 章名使用样式“标题1”,并居中;自动编号格式为:第X章,其中X为自动排序。

(2) 小节名使用样式“标题2”,左对齐;自动编号格式为:多级符号,X.Y。

X为章数字序号,Y为节数字序号(例:1.1)

(3) 对出现“1.”、“2.”…处,进行自动编号,编号格式不变;对出现“1)”、“2)”…

处,进行自动编号,编号格式不变。

在“格式”中的项目符号和编号中设置。

相关信息


电脑版

【免责声明】本站信息来自网友投稿及网络整理,内容仅供参考,如果有错误请反馈给我们及时更正,对文中内容的真实性和完整性本站不提供任何保证,不承但任何责任。
版权所有:学窍知识网 Copyright © 2011-2024 www.at317.com All Rights Reserved .