【问题标题】:How to accommodate insertion of new line of code如何适应新代码行的插入
【发布时间】:2020-07-13 19:21:48
【问题描述】:

我在下面有以下代码,它基于值字段(其中包含数据)按顺序构建/创建描述。例如,我有一个包含以下字段的表... 物品 分类 属性名称 价值 计量单位 状态

我要做的是插入一行代码,该代码将仅从状态字段 = 活动的值字段(其中包含数据)构建描述。状态字段信息是“活动”或“外国”。目前,如果 Status 字段显示“Foreign”,则代码还将为这些我刚刚学到的不应该包含的记录构建描述。

任何帮助将不胜感激!同样,下面是代码...

Sub SD()
DoCmd.SetWarnings False

Dim db As DAO.Database
Dim rsMara, rs_cou As DAO.Recordset
Dim rs, rs2, x As DAO.Recordset
Dim SD, strAttribute, strValue, sdvalue As String
Dim seq, d, count1 As Integer
Set db = CurrentDb

db.Execute ("UPDATE Item_Template SET Description = '', Long_Description = '';")
Set rsMara = db.OpenRecordset("select * from [Item_Template] order by [Item]")

While Not rsMara.EOF
If rsMara.Fields("Classification") & "" <> "" Then
SD = UCase(rsMara.Fields("Classification")) & ": "
seq = 1
Set rs = db.OpenRecordset("select * from All_Item_Attributes where [Item] = '" & rsMara.Fields("Item") & "' and [Value] & '' <> '' order by [Item],[Sequence (Cls Attribute Mapping)]")

While Not rs.EOF
If (rs.Fields("UOM") Like "IN*" Or rs.Fields("UOM") Like "O*") Then
     SD = SD & rs.Fields("Value") & " " & UCase(rs.Fields("UOM")) & ", "
Else
     SD = SD & rs.Fields("Value") & " " & UCase(rs.Fields("UOM")) & ", "
End If
rs.MoveNext
Wend
        SD = Trim(SD)
        rsMara.Edit
        SD = Trim(Mid(SD, 1, Len(SD) - 1))
        rsMara.Fields("Description") = Trim(SD)
        rsMara.Fields("Description") = Replace(rsMara.Fields("Description"), " ,", ", ")
        rsMara.Fields("Description") = Replace(rsMara.Fields("Description"), "  ", " ")
        rsMara.Update
End If
DoEvents
rsMara.MoveNext
Wend
End Sub

【问题讨论】:

  • Dim rsMara, rs_cou As DAO.Recordset - 只有rs_couDAO.RecordsetrsMaravariant。您需要使用Dim rsMara As DAO.Recordset, rs_cou As DAO.Recordset。与其他变量声明相同。
  • 我一直想知道这一点 - 当您创建一个名为 Value 的字段时,Access 不会抱怨吗? ...is a reserved word.....
  • 您能否发布一些示例数据和预期结果 - 看起来应该有比您的代码显示的更简单的方法。

标签: ms-access vba


【解决方案1】:

你没有说Status这个字段在哪个表。
您有两行代码打开记录集,因此它将是以下代码行之一:

Set rsMara = db.OpenRecordset("select * from [Item_Template] WHERE Status='Active' order by [Item]")  

Set rs = db.OpenRecordset("select * from All_Item_Attributes where [Item] = '" & rsMara.Fields("Item") & "' and [Value] & '' <> '' AND Status='Active' order by [Item],[Sequence (Cls Attribute Mapping)]")

基本上将Status='Active' 添加到WHERE 子句中。如果您的 Status 字段是查找字段,则这将不起作用,在这种情况下,您需要使用将其链接到状态类型表的 外键 值。以Status=1 为例。

【讨论】:

  • 数据来源的表是调用 All_Item_Attributes 并且是“链接”表。首先将数据附加到 Item_Template 表中,然后根据 Item_Template 数据构建代码。问题是“状态”字段未附加到项目模板...我假设我需要附加该字段并使用您的更新“更新”代码?抱歉,我是编码新手,但我真的很想学习。
  • 所以你有两个表 - All_Item_AttributesItem_Template。您将DescriptionLong_Description 设置为Item_Template 中所有记录的零长度字符串(最好使用Null 而不是'')。然后,您从All_Item_Attributes 返回所有内容,其中Item 字段等于另一个表中的字段,Value 字段包含零长度字符串?然后,您逐步浏览每条记录,并在 UOM 字段以 INO 开头的位置将 ValueUOM 字段添加到 SD(变体)变量。看起来你应该可以加入表格。
猜你喜欢
  • 2011-08-03
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
  • 2012-03-10
  • 2022-10-15
相关资源
最近更新 更多