我有一组表格,可根据零件类型跟踪设备零件的各种属性。某些零件类型共享某些属性,例如长度,重量,最后订单日期等。但是,还有一些属性对于特定零件类型是唯一的。例如,“电动机”类型的部件将具有电压但不具有流明额定值,“LED”类型的部分也是如此......尽管“LED”部分也将具有电压。
有时,零件的类型将被更改,当发生这种情况时,我们的数据库要求在相应的表中创建新记录以跟踪零件的新属性。我们希望能够复制旧的和新的部件类型表之间常见的先前部件类型字段的先前共享属性值。如果旧字段和新字段是等效的,它们将共享完全相同的字段名称,即“权重”字段在两个表中都将被命名为“权重”。
在VBA中,可以直接遍历两个表中的字段并比较字段名称以进行匹配。找到匹配项后,需要将数据从旧部件类型表复制到新表中的相应字段。棘手的部分(我希望得到建议)是当数据类型可以是任何东西时如何有效地更新新字段,例如文本,数字,日期,OLE对象等。当然,限制每个的语法这些是不同的 - 文本字段需要单引号,日期需要一个井号,数字不需要任何东西,不确定OLD对象需要什么。
我目前的想法是根据字段的数据类型设置边界字符,然后在构建SQL字符串时添加这些字符,然后执行该字符串以更新新表。这是一些伪代码和我认为我会使用的SQL语句。 tdf对象是DAO tabledef,fld对象是DAO字段对象。
问题:
是否有更好的方法(更有效,更清洁,更可靠,更标准)
我应该设置一个记录集来实际访问旧的数据 表或者是DLookup()是一个不错的选择,因为只有
我从未在表之间移动OLE对象。毫无疑问,其他 StackOverflow帖子将解决这个问题。但如果你有想法 然后我会很高兴听到他们。
<nested loop to match old and new field names>
<if a matching field is found, then>
strSQL = "UPDATE " & tdfTo.Name & " SET " & fldTo.Name & " = " & DLookup(fldFrom.Name, tdfFrom.Name, "part_number = " & strPartNum) & " WHERE part_number = '" & strPartNum & "';"
CurrentDB.Execute strSQL
<end nested matching loop>r