我有一个Access数据库文件,我用它来处理CAD包中的物料清单输出。我不是完全使用它作为关系数据库,更像是一些数据的中间处理步骤,以便输出一些条形码来识别我们工作室中的部分,然后链接回一些CNC加工代码文件,我将根据每个零件的PARAMETERS
生成。
基本上,我所处的阶段是我有一个表格,其中包含如下数据:
REF NB JOB_ID PART_ID DESIGNATION PARAMETERS
A 4 00001 RAFTER L=500 W=56
B 6 00001 RAFTER L=700 W=56 P=25
B 2 00001 DOOR JAMB FH=2090 W=66 OD=0
A 2 00123 SASH STILE SH=500 SSW=56 HANG=3
A 2 00123 SASH RAIL SH=500 SRD=66 HANG=3
对于几个不同的JOB_ID
值,可以有数百个部分,可以选择不同的参数。
我之后在访问中保存了一个查询,其中包含以上所有字段和排序:JOB_ID
,然后是DESIGNATION
,然后是REF
。我当时需要做的是查看查询并为每条记录分配PART_ID
,以便JOB_ID
和PART_ID
的组合是唯一的。因此,对于上面的示例,我可能最终得到(在排序和分配PART_ID
之后):
REF NB JOB_ID PART_ID DESIGNATION PARAMETERS
B 2 00001 00001 DOOR JAMB FH=2090 W=66 OD=0
A 4 00001 00002 RAFTER L=500 W=56
B 6 00001 00003 RAFTER L=700 W=56 P=25
A 2 00123 00001 SASH RAIL SH=500 SRD=66 HANG=3
A 2 00123 00002 SASH STILE SH=500 SSW=56 HANG=3
我需要帮助以解决这个问题的最佳方法。大概我需要用查询打开一个记录集,遍历记录并分配一个递增的PART_ID。
具体来说,我该怎么做:
使用查询打开记录集?我知道如何用桌子做这件事。 以最有效的方式遍历该记录集? 将更新保存到基础表?
我也愿意接受有关更好方法的建议。
非常感谢。
答案 0 :(得分:1)
您必须了解的一件事是,除非在创建表时明确排序,否则Access中的表数据不会被排序。通常,您在屏幕上看到的表格排序是一个谎言。
使用所有表格数据创建新查询,按JOB_ID
升序排序
并保存查询。
创建第二个查询并使用第一个查询作为源数据。 我们将第一个查询视为现在是一个表。访问是 好的,这个。继续并将所有表列放入 现在。
在现有JOB_ID
字段旁边创建一个新列。这样做
将一些随机字段从向下拖动到JOB_ID
旁边的网格。
输入该字段名称:
TEST_PART_ID:RunningCount([JOB_ID])
。
打开VBE编辑器(Alt-F11
)并在新的中输入以下代码
模块。
代码:
Function RunningCount(WhatToCount As String) As Integer
Static CountSoFar As Long, var As String
If var <> WhatToCount Then
CountSoFar = 0
var = WhatToCount
End If
CountSoFar = CountSoFar + 1
RunningCount = CountSoFar
End Function
PART_ID
栏。答案 1 :(得分:0)
@tbur非常感谢,你的回答非常有效。
然而,我做了以下改变:Function RunningCount(WhatToCount As String, NumDigits As Integer) As String
Static CountSoFar As Long, var As String
If var <> WhatToCount Then
CountSoFar = 0
var = WhatToCount
End If
CountSoFar = CountSoFar + 1
RunningCount = Left("00000000000000000000", NumDigits - Len(CStr(CountSoFar))) & CountSoFar
End Function
这给了我输出,包括前导零,因为我需要它们(我想将每个ID保持为5位以帮助稍后的条形码处理,但我添加了一个变量来选择输出应该有多少位数)。