0

*编辑:问题是 SQL 语句必须一次将区域添加到 MVF 中。第二个问题是我忘记在循环中执行 SQL。

我在 Access 2007 中遇到了一些 SQL 语句涉及称为“区域”的多值字段的问题。这个想法是任何一个用户都有他们所属的几个相关领域。不同的区域显示在多选列表框中,并使用以下代码插入。经过一番研究,似乎传递多值字段需要插入。[虽然我不确定这个]

我的第一次尝试看起来像这样

For i = 0 To Me.boxArea.ListCount - 1
        If Me.boxArea.Selected(i) Then
            sqlString = sqlString & Me.boxArea.Column(boundColumnZeroBasedIndex, i) & ","
        End If
Next i

这导致了一个错误,指出:“值和目标字段的数量不一样。” SQL 字符串最终如下所示,这让我意识到它的行为类似于常规插入,并且多个值被视为不同的字段。

"INSERT INTO Users ([area].[Value]) VALUES(G1 ,G2,G3,) WHERE badgeNumber = '404';"

对于我的下一次尝试,我认为它可能只需要一次传递一个值。

If Me.boxArea.Selected(i) Then
            sqlString = "INSERT INTO Users ([area].[Value]) VALUES('" & Me.boxArea.Column(boundColumnZeroBasedIndex, i) & "') WHERE badgeNumber = '" + txtBadgeNumber + "';"
        End If
Next i

这没有错误,但它只包括最后一个值而不是整个字符串。所以G3就是所有出现的东西。

只有一个值

所以现在我很困惑如何通过 Access 中的 SQL 将多个值插入到 MVF 中。到目前为止,我尝试过的一切都会产生错误或意外结果。您能提供的任何帮助将不胜感激。谢谢!

- 编辑信息以供评论

这是一个显示 boxArea 值的调试屏幕 调试屏幕

唯一运行的其他 SQL 语句是创建用户的 SQL 语句。我相信它没有任何问题,但作为参考。

sqlStr = "INSERT INTO Users ( badgeNumber, firstName, lastName, accessLevelID, department, email, phone, mobile, fax, pager, title, displayName, company )VALUES ('" + txtBadgeNumber + "', '" + txtFirstName + "', '" + txtLastName + "', 1, 'BE23515', '" + txtEmail + "', '" + txtPhone + "', '" + txtMobile + "', '" + txtFax + "', '" + txtPager + "', '" + txtTitle + "', '" + txtDisplay + "', 'XXXX');"
CurrentDb.Execute sqlStr, dbFailOnError
4

1 回答 1

2

您的第二次尝试看起来很接近。不要使用更新语句,而是使用插入。例如:

sqlString = "INSERT INTO Users ([area].[Value]) VALUES ('" & Me.boxArea.Column(boundColumnZeroBasedIndex, i) & "') WHERE badgeNumber = '" + txtBadgeNumber + "';"

如需参考,请参阅 Microsoft 网站上的此页面:

http://office.microsoft.com/en-us/access-help/using-multivalued-fields-in-queries-HA010149297.aspx

于 2013-09-09T17:20:11.453 回答