以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]生成编号的问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=44846) |
||||
-- 作者:xu3180497 -- 发布时间:2014/1/10 10:01:00 -- [求助]生成编号的问题 现在有一个表里面有三列:编号,部门,内容。现在想让编号列按照部门自增。在表的DataRowAdded事件中实现。比如磷酸车间人员进入系统添加信息编号就自增为LS0004,供货车间人员添加信息编号就自增为GH0003,以此类推,每次找该车间最大编号,在这个基础上递增。
上个例子:
[此贴子已经被作者于2014-1-10 10:13:36编辑过]
|
||||
-- 作者:7EQ98 -- 发布时间:2014/1/10 10:26:00 -- *** EC_MAX_NO *** 开发日期:2013-05-21 作者:LLAjun *** 修改日期:2013-05-21 参与者: *** 作用:返回最大编号 *范例: * = EC_MAX_NO(1,\'U_MPlan\',"MPlan_Num","WJ_[YYYY]_[MM]_[XXXX]") *!* EL_Net_Num = 1 &&网络连接 *!* EL_Net_Name = "U_MPlan" &&网络表名称 *!* EL_Fid_Name = "Mplan_Num" &&编码字段 *!* EL_Num_Code = Alltrim(Upper(EP_MPlan_Type(This.Parent.Combo1.ListIndex,6))) &&编码方案 *!* EL_Max_Num = EC_Max_NO(EL_Net_Num,EL_Net_Name,EL_Fid_Name,EL_Num_Code) Lparameters Input_Net_Num,Input_Net_Name,Input_Fid_Name,Input_Code,Input_Type LOCAL Input_Net_Num,Input_Net_Name,Input_Fid_Name,Input_Code,Input_Type Input_Net_Num = Iif(Type("Input_Net_Num")="N",Input_Net_Num,1) &&网络连接 Input_Net_Name = Iif(Type("Input_Net_Name")="C",Alltrim(Upper(Input_Net_Name)),"U_MPlan") &&网络表名称 Input_Fid_Name = Iif(Type("Input_Fid_Name")="C",Alltrim(Upper(Input_Fid_Name)),"MPlan_Num") &&编码字段名称 Input_Code = Iif(Type("Input_Code")="C",Alltrim(Upper(Input_Code)),"WJ-[YYYY]-[MM]-[XXXX]") &&编码方式 WJ_[YYYY]_[MM]_[XXXX] Input_Type = Iif(Type("Input_Type")="C",Alltrim(Upper(Input_Type)),"A") &&A使用字母增位,L自动增位 Input_Code = EF_Para(Input_Code) &&替换系统参数 REOUT = "" |
||||
-- 作者:7EQ98 -- 发布时间:2014/1/10 10:27:00 -- ****** 必要传入参数检测 Top *** If Empty(Input_Net_Name) = .T. Return REOUT Endif If Empty(Input_Fid_Name) = .T. Return REOUT Endif If Empty(Input_Code) = .T. Return REOUT Endif *** ****** 必要传入参数检测 End ****** 增位方式提取 Top *** If "{A}"$Input_Code Input_Type = "A" Input_Code = Strtran(Input_Code,"{A}","") Endif If "{L}"$Input_Code Input_Type = "L" Input_Code = Strtran(Input_Code,"{L}","") Endif *** ****** 增位方式提取 End |
||||
-- 作者:7EQ98 -- 发布时间:2014/1/10 10:28:00 -- ****** 流水号码段定位长度 Top *** EL_Code_Len = 0 &&流水号位数 For EL_I = 1 To 20 EL_X = "[" + Padl("", EL_I ,"X") + "]" If EL_X $ Input_Code Input_Code = Strtran(Input_Code,EL_X,"") EL_Code_Len = EL_I Endif Next *** ****** 流水号码段定位长度 End ****** 网络连接 Top *** EL_Net_Handle = EC_Net(Input_Net_Num) &&网络连接 If EL_Net_Handle <= 0 Return REOUT Endif *** ****** 网络连接 End ****** 生成条件语句 Top *** EL_Cast_Code = EF_Cast(Input_Code,\'V\',\'SQL\',\'X%T\') &&左包含 EL_Cast_LEN = EF_Cast(LEN(Input_Code) + EL_Code_Len,\'V\',\'SQL\',\'\') && If Input_Type = \'A\' &&自动增加号码 EL_SQL_Exec = "Select Max("+ Input_Fid_Name +") AS Max_Num" + ; " FROM " + Input_Net_Name + ; " Where " + Input_Fid_Name + " Like " + EL_Cast_Code +; " And Len(LTrim(RTrim("+Input_Fid_Name+"))) >= " + EL_Cast_LEN +"" Else EL_SQL_Exec = "Select Max("+ Input_Fid_Name +") AS Max_Num" + ; " FROM " + Input_Net_Name + ; " Where " + Input_Fid_Name + " Like " + EL_Cast_Code +; " And Len(LTrim(RTrim(MPlan_Num))) >= (" +; "Select MAX(Len(LTrim(RTrim("+Input_Fid_Name+"))))" +; " FROM " + Input_Net_Name + ; " Where " + Input_Fid_Name + " Like " + EL_Cast_Code +; ")" Endif *** ****** 生成条件语句 End *!* _Cliptext = EL_SQL_Exec |
||||
-- 作者:7EQ98 -- 发布时间:2014/1/10 10:29:00 -- ****** 返回最大编号 Top *** EL_Max_Num = "" EL_Cur_Dbf = "Cur_Max_NO" &&统计记录数量使用到的临时表 EL_Alias = Alias() &&返回当前工作表 If Used(EL_Cur_Dbf) = .T. Use In(EL_Cur_Dbf) Endif *** 执行SQL语句查询 Top Try &&异常错误,TRY 无提示处理 nResult = SQLExec(EL_Net_Handle,EL_SQL_Exec,EL_Cur_Dbf) &&网络查询语句 CATCH _Cliptext = EL_SQL_Exec nResult = -4 Endtry *** 执行SQL语句查询 End If nResult >= 0 And Used(EL_Cur_Dbf)=.T. Select(EL_Cur_Dbf) EL_Max_Num = Max_Num If Isnull(EL_Max_Num) = .T. EL_Max_Num = Padl("", EL_Code_Len ,"0") Endif ELSE _Cliptext = EL_SQL_Exec Endif If Used(EL_Cur_Dbf) = .T. Use In(EL_Cur_Dbf) Endif If Empty(EL_Alias) = .F. If Used(EL_Alias) = .T. Select(EL_Alias) Endif Endif If Empty(EL_Max_Num) = .T. Return REOUT Endif *!* _Cliptext = FL_Exec_CSql *** ****** 返回最大编号 End |
||||
-- 作者:7EQ98 -- 发布时间:2014/1/10 10:29:00 -- ****** 生成最新编号 Top *** EL_Max_X = Alltrim(Strtran(EL_Max_Num,Input_Code,\'\')) &&取返回的流水号部分 EL_Max_X_N = Val(EL_Max_X) + 1 &&返回流水号转换数字值后+1 EL_Max_X_C = Str(EL_Max_X_N) &&+1后转换为字符型 EL_Max_X_Len = Len(Alltrim(EL_Max_X_C)) &&转换为字符型后的长度 EL_Max_X_Out = "" If Input_Type = \'L\' &&自动增加号码 If EL_Max_X_Len <= EL_Code_Len &&新的字符串长度小于等于指定长度时 EL_Max_X_Out = Strtran(Str(EL_Max_X_N,EL_Code_Len),\' \',\'0\') Else EL_Max_X_Out = Alltrim(Str(EL_Max_X_N)) Endif Else EL_SJ = .F. EL_A_Len = 0 For EL_U = 1 To LEN(ALLTRIM(EL_Max_X)) &&从1位开始检查是否为字母 EL_P = Asc(Substr(Alltrim(EL_Max_X),EL_U,1)) If EL_P >=65 And EL_P <=90 And EL_P<>0 &&如果是字母 EL_SJ = .T. EL_A_Len = EL_U &&字母部分长度 Endif Next If EL_SJ = .F. If EL_Max_X_Len > EL_Code_Len &&返回流水号总长度大于流水号长度 EL_SJ =.T. EL_A_Len = 1 &&字母部分长度 Endif Endif |
||||
-- 作者:7EQ98 -- 发布时间:2014/1/10 10:30:00 -- If EL_SJ = .T. EL_A_C = Substr(Alltrim(EL_Max_X),1,EL_A_Len) &&字母部分 EL_N_LEN = EL_Code_Len - EL_A_Len &&数字部分长度 EL_N_C = Substr(Alltrim(EL_Max_X),EL_A_Len + 1,EL_Code_Len) &&数字部分 EL_N = Val(EL_N_C) + 1 &&取数字部分+1 If Len(Alltrim(Str(EL_N))) > EL_N_LEN &&如果长度超过原有数字部分长度 If Asc(Right(EL_A_C,1)) >= 90 EL_A_C = EL_A_C + "A" EL_N_C = Strtran(Str(1,EL_N_LEN-1),\' \',\'0\') EL_Max_X_Out = EL_A_C + EL_N_C ELSE IF Asc(Right(EL_A_C,1)) >= 48 AND Asc(Right(EL_A_C,1)) <= 57 &&为9 EL_A_C = Left(EL_A_C,EL_A_LEN - 1) + "A" else EL_A_C = Left(EL_A_C,EL_A_LEN - 1) + Chr(Asc(Right(EL_A_C,1))+1) endif EL_N_C = Strtran(Str(1,EL_N_LEN),\' \',\'0\') EL_Max_X_Out = EL_A_C + EL_N_C Endif Else EL_Max_X_Out = Substr(Alltrim(EL_Max_X),1,EL_A_Len) + Strtran(Str(EL_N,EL_N_LEN),\' \',\'0\') Endif Else EL_Max_X_Out = Strtran(Str(EL_Max_X_N,EL_Code_Len),\' \',\'0\') Endif Endif EL_Max_Out = Input_Code + EL_Max_X_Out RETURN EL_Max_Out *** ****** 生成最新编号 End |
||||
-- 作者:7EQ98 -- 发布时间:2014/1/10 10:30:00 -- ![]() |
||||
-- 作者:xu3180497 -- 发布时间:2014/1/10 10:33:00 -- ![]() |
||||
-- 作者:Bin -- 发布时间:2014/1/10 10:41:00 -- http://www.foxtable.com/help/topics/2403.htm |