关于自动编号的问题,这样做: 肯定得有个规则:假如编号规则是:abc00001,那么:前面abc是字符,后面是序号 假如字段名:Code1、在数据库里面,设置唯一性索引2、vb里面 private function get_maxcode() as string dim cn as new adodb.connection dim strSql as string dim rsCode as new adodb.recordset dim strCode as string '取数据库中最大编号 cn.connectstring="数据库连接字串" set rscode.activeconnection = cn rscode.open "select max(Code) as MaxCode form 表名" '计算最大编号+1 strCode = rsCode("MaxCode") strCode = "abc" & clng(replace(strCode,"abc",""))+1 '返回可用编号 get_maxcode=strCode end function3、在保存数据之前,调用函数赋值: rsData("Code") = get_maxcode rsData.UpdateBatch因为取数、赋值、保存这些动作,前后相隔是毫秒级的,所以在这个间隔中,两个人发生冲突的机会非常小。 那么万一真的发生冲突会怎样呢? 因为数据库有唯一性约束,两个人取了重复的Code的话,第二个保存的人会出错,并返回信息“违反约束...” 这时候他只要再点保存按钮一下,那么就会重新取Code,可以存进去了。
还有一种办法就是不用拷贝ID号进来,在B表中把ID号设为自动增加,应该不会出现你说的问题吧?
如:HLOT-05-0001,下一个应为HLOT-05-0002,....0003,.... 每次添加一个新的订单时,
B表依据A表中的订单号自动生成下一个订单号.
如果两个人同时向B表添加,而第一个人还没有保存,也就是没有把B表中的数据保
存到A表中,会出现错误:
1/两个人生成的规格单号相同的.
2/第二个人添加时记录添加到第一个的记录里.
A--------运行
BEGIN TRANSACTION
SELECT * FROM Inserted WITH (XLOCK) '如果B也运行 SELECT * FROM Inserted WITH (XLOCK)
COMMIT '就会等待直到A COMMIT为止
我刚学vb的时候也干过这样的傻事阿:
界面拉了一个ado控件,绑定一下,然后填什么东西就直接存进数据库里了阿
但是人家要有保存按钮,还要有放弃保存功能啊?怎么办呢?
于是就建一个临时表.....不知道是不是这样啊?
如果不幸猜中的话,删掉临时表,试一下用断开式记录集啊:设置属性:
Adodc1.CursorLocation = adUseClient
Adodc1.CursorType = adOpenKeyset
Adodc1.LockType = adLockBatchOptimistic
保存记录:
Adodc1.Recordset.UpdateBatch
不保存:
Adodc1.Recordset.CancelBatch其他都一样用哈~~要是没猜对,就当我没说,嘿嘿~~~
肯定得有个规则:假如编号规则是:abc00001,那么:前面abc是字符,后面是序号
假如字段名:Code1、在数据库里面,设置唯一性索引2、vb里面
private function get_maxcode() as string
dim cn as new adodb.connection
dim strSql as string
dim rsCode as new adodb.recordset
dim strCode as string
'取数据库中最大编号
cn.connectstring="数据库连接字串"
set rscode.activeconnection = cn
rscode.open "select max(Code) as MaxCode form 表名"
'计算最大编号+1
strCode = rsCode("MaxCode")
strCode = "abc" & clng(replace(strCode,"abc",""))+1
'返回可用编号
get_maxcode=strCode
end function3、在保存数据之前,调用函数赋值:
rsData("Code") = get_maxcode
rsData.UpdateBatch因为取数、赋值、保存这些动作,前后相隔是毫秒级的,所以在这个间隔中,两个人发生冲突的机会非常小。
那么万一真的发生冲突会怎样呢?
因为数据库有唯一性约束,两个人取了重复的Code的话,第二个保存的人会出错,并返回信息“违反约束...”
这时候他只要再点保存按钮一下,那么就会重新取Code,可以存进去了。