使用访问前端更新sql server表的正确方法

时间:2010-09-20 17:57:28

标签: sql-server ms-access identity-insert

我的访问前端和后端是sql server 2008

其中一个字段是帐号,这是规则

它是一个像92111这样的邮政编码加一个短划线和一个数字。

所以第一个是92111-1,第二个是92111-2

这与我们在邮政编码中拥有的客户数

有关

我希望自动生成此邮政编码。这就是我需要的:

  1. 用户输入邮政编码
  2. 我有一个存储过程,检查此邮政编码是否已存在,以增加它:如果已存在92111-4,则将其设为92111-5。
  3. 这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

如果您将zip和客户序列号都存储在一个帐号字段中,则必须将它们拆开以找出给定邮政编码中的下一个序列号。

将它们存储在2个字段中应该更简单:

zipcode   sequence_num
92111     4
92111     5

然后在需要时使用查询派生您的帐号字段。

SELECT zipcode & "-" & sequence_num AS acct_num
FROM YourTable;

然后当你需要确定给定邮政编码中的下一个sequence_num,lngNextSequenceNum时,pZip:

lngNextSequenceNum = DMax("sequence_num", "YourTable", "zipcode = " & pZip) +1

该方法适用于单个用户应用程序。如果您的应用程序是多用户,则需要更精确的内容。但是,无论您将“帐号”存储为单个字段还是将其分成两个字段,都存在这一要求。

有关多用户方法,请参阅Create and Use Flexible AutoNumber Fields

答案 1 :(得分:1)

我同意HansUp你应该保持ZIP和序列分开。您可以创建一个名为AccountNumber的索引计算字段,该字段连接zip和序列。

我知道这样做的唯一方法是锁定表格,选择max(sequence) ... where ZIP = 12345,插入新记录,然后解锁表格。但是,锁定表意味着其他所有人都必须等待,这极大地影响了可伸缩性。我不能推荐这个,但我没有其他解决方案。