当前位置: 首页 > 面试题库 >

将行添加到Access表时生成序列号(每组)

沙柏
2023-03-14
问题内容

我有一个MS Access(.accdb)表,其数据如下所示:

Location Number
-------- ------
ABC      1
DEF      1
DEF      2
GHI      1
ABC      2
ABC      3

每次将数据附加到表中时,我希望该数字对于位置而言是唯一的。我正在通过MS Excel VBA访问此表-
我想创建一个新记录(我在代码中指定位置)并创建一个唯一的序列号。有没有一种方法可以设置表,以便在添加记录时自动发生这种情况?我应该写一些描述查询并确定每个位置的下一个号码,然后在创建记录时同时指定“位置和号码”吗?

我正在写下表,如下所示:

    Set rst = New ADODB.Recordset
    rst.CursorLocation = adUseServer
    rst.Open Source:="Articles", _
         ActiveConnection:=cnn, _
         CursorType:=adOpenDynamic, _
         LockType:=adLockOptimistic, _
         Options:=adCmdTable
    rst.AddNew
    rst("Location") = fLabel.Location 'fLabel is an object contained within a collection called manifest
    rst("Number") = 'Determine Unique number per location
    rst.Update

任何帮助,将不胜感激。

编辑-添加了我正在苦苦挣扎的VBA代码,因为问题被搁置了


问题答案:

我怀疑您正在寻找这样的东西:

Dim con As ADODB.Connection, cmd As ADODB.Command, rst As ADODB.Recordset
Dim newNum As Variant

Const fLabel_Location = "O'Hare"  ' test data

Set con = New ADODB.Connection
con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Public\Database1.accdb;"

Set cmd = New ADODB.Command
cmd.ActiveConnection = con
cmd.CommandText = "SELECT MAX(Number) AS maxNum FROM Articles WHERE Location = ?"
cmd.CreateParameter "?", adVarWChar, adParamInput, 255
cmd.Parameters(0).Value = fLabel_Location
Set rst = cmd.Execute
newNum = IIf(IsNull(rst("maxNum").Value), 0, rst("maxNum").Value) + 1
rst.Close

rst.Open "Articles", con, adOpenDynamic, adLockOptimistic, adCmdTable
rst.AddNew
rst("Location").Value = fLabel_Location
rst("Number").Value = newNum
rst.Update
rst.Close
Set rst = Nothing
Set cmd = Nothing
con.Close
Set con = Nothing

但是请注意,此代码 不是 多用户安全的。如果可能有多个用户同时运行此代码,则 可能会 出现重复的[Number]值。

(要使代码具有多用户安全性,您需要在[[Location],[Number])上创建唯一索引,并添加一些错误陷阱,以防rst.Update失败。)

\



 类似资料:
  • 问题内容: 我使用SQLAlchemy制作了一个表,却忘记添加列。我基本上想这样做: 这是什么语法?我在文档中找不到它。 问题答案: 这称为数据库迁移(SQLAlchemy不支持即开即用的迁移)。您可以考虑使用sqlalchemy- migrate 在这种情况下提供帮助,也可以仅通过选择的数据库的命令行实用程序,

  • 问题内容: 我在MS Access中存储了一个查询,该查询正在从Access表中进行标准选择。我想在末尾添加一个摘要行,以显示上述某些数据的总和。 我已经看过DSum(),但是它不合适,因为我必须在每行而不是最后一行中包含运行总计。 另外,请注意,我不想对a列中的数据求和-我想为a列的摘要获取一个空字段。 例子: 有谁知道如何在Access中解决此问题?一种替代方法是定义第二个查询,该查询将进行聚

  • 问题内容: 我想避免。我该怎么办? 问题答案: 您可以在迭代本身期间使用支持remove / add方法的。

  • 问题内容: 与此问题类似,如何将空列添加到数据框?,我想知道向DataFrame添加一列空列表的最佳方法。 我想要做的基本上是初始化一列,然后遍历行以处理其中的一些行,然后在此新列中添加填充列表以替换初始化的值。 例如,如果下面是我的初始DataFrame: 然后,我最终希望得到这样的结果,其中每一行都经过单独处理(显示了示例结果): 当然,如果我尝试像使用其他任何常量一样进行初始化,它会认为我正

  • 在有趣的功能中,当我将列表添加到其他列表时,它正在添加空列表,我可以找到原因有人可以帮助我这个程序是关于查找给定数组的不同组合

  • 很容易将列表列表转换为数据帧: 但是我如何将df转换回列表列表呢?