【问题标题】:Tag new records with number 1 to 6, evenly allocated用数字 1 到 6 标记新记录,均匀分配
【发布时间】:2014-04-07 15:20:07
【问题描述】:

我带来了一个需要分成 6 个列表的记录集。我正在使用字段 WrkList 来保存范围为 1-6 的列表编号。我不想手动将数字添加到每个新记录中,重复序列为 (1, 2, 3, 4, 5, 6),因为它们被引入。WrkList 字段允许记录由6 名员工使用使用该字段作为该查询条件的查询。在任何一天,超过 1200 条记录可能会全天附加到表中,并且需要更新 WrkList 字段。我希望这些在 6 个组中尽可能均匀地分配,因为每个新的记录集都被附加。任何有关入门的帮助将不胜感激。

【问题讨论】:

  • 如何添加新记录?用户输入还是文件导入?一个接一个,还是多个/批量?
  • 我看到你标记了这篇文章 VBA。是否有任何与添加新记录相关的 VBA 代码?请张贴代码。欢迎来到 Stack Overflow。
  • 检查这个答案:stackoverflow.com/a/21032394/122139。 (这个问题措辞不好,可能看起来无关紧要,但答案可能非常相关。)
  • Smandoli,记录是通过从 Web 服务器上的另一个访问数据库导入批量添加的。回复通过网络表单提交。我必须将它们复制到共享服务器上的数据库中,以便我们的员工能够使用它们。我用 VBA 标记,因为我不确定是否应该使用 SQL 或 VBA 来处理,我对这两者都相当精通,但绝不是专家。 Java 脚本从网络服务器数据库复制到共享服务器数据库。您是正确的,因为我需要将它们从 1-6 分配编号,每批次从 1 开始重复。
  • 如果错误则更正,但“回复”方法无关紧要。你是怎么导入的?访问导入向导,也许带有导入规范?什么版本的访问?还是这是“手动”剪切和粘贴?我建议您重新处理您的问题以在此处包含所有信息,我们删除其中一些 cmets。实际上,由于缺乏明确性,您的问题很难回答;出于同样的原因,不适合 Stack Overflow。

标签: sql vba ms-access


【解决方案1】:

基本上,您将在 DAO 中打开一个记录集,其中包括所有 WrkList 为 Null 的记录。您将按照他们进入的顺序或其他一些逻辑标准对其进行排序 - 任何有助于您的工作人员有一个连贯的工作队列的东西(可能根本没有顺序)。

您将从头到尾浏览记录集并使用变量byteWrkList 更新WrkList 字段。

这个变量的值会随着每次编辑而改变。它将递增 1,或者如果上次编辑时为 6,它将返回到 1。

注意:此代码未指定您已过滤为 Null! OpenRecordset 必须基于过滤 Null 的查询! (或者它必须基于执行相同操作的 SQL 字符串。)

Option Compare Database
Option Explicit

Private Sub AllocateTasks()
    Public byteMax As Byte, byteWrkList as Byte
    byteMax = 6
    byteWrkList = 1

    Dim rstTask As Recordset
    Set rstTask = CurrentDb.OpenRecordset("tableOfTasks")

    Do Until rstTask.EOF 
        if byteWrkList > byteMax then
            byteWrkList = 1
        else
            byteWrkList = byteWrkList + 1
        end if

        rstTask.Edit

        ' Make sure you are not over-writing an existing value!
        ' Make sure it is NULL, or that your recordset excluded NULLs.
        rstTask!WrkList = byteWrkList
        rstTask.Update

        rstTask.MoveNext

    Loop

    rstTask.Close
    Set rstTask = Nothing

End Sub

那么你只需要一种调用(触发)上述代码的方法......但你的帖子并没有足够的信息来暗示那是什么。

有其他(和优雅的)方法来获取byteWrkList,例如使用应用于自动编号索引的mod() 函数。 (这并不重要。我不得不把它从我的胸口拿走,因为mod() 很有趣。)确实,有其他方法可以完全处理这个问题;但这是我要开始的。

【讨论】:

  • 谢谢!你给了我我需要的开始块。我使用查询来过滤空记录,以免覆盖已编号字段中的现有值。它工作得非常好......对不起,我最初的问题很啰嗦,而且绕着我真正需要问的问题徘徊。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-21
  • 1970-01-01
相关资源
最近更新 更多