我有一个MS Access数据库,其中包含一个基于查询的表单,其中包含从几个表中获取的简化数据。两个相关表中的主键(ItemNumber)都存在于表单所基于的查询中。
我希望能够使用按钮将记录从表Products移动到SuspendedProducts - 所以三部分过程:
选择具有与当前在表单中选择的项目编号相同的商品中的记录
将此记录复制到SuspendedProducts
从产品中删除
只是为了让它复制记录,我尝试了一些东西,但似乎都没有。在VBA我写过
"INSERT INTO SuspendedProducts SELECT * FROM Products WHERE ItemNumber =" Me.ItemNumber
但它没有将任何内容复制到SuspendedProducts中。轻微的变化使它什么都不做,或者让它抱怨语法错误。
答案 0 :(得分:2)
由于评论中已经解决了这个问题,我会将我的建议作为答案发布,以便将此问题标记为已解决。
您当前的代码基本上存在三个问题:
执行您构造的SQL表达式需要CurrentDb.Execute
或DoCmd.RunSQL
方法 - 否则SQL表达式只是一个字符串。
在构造SQL字符串时,您错过了连接运算符(&
):
您的代码:
"INSERT INTO SuspendedProducts SELECT * FROM Products WHERE ItemNumber =" Me.ItemNumber
应该读过:
"INSERT INTO SuspendedProducts SELECT * FROM Products WHERE ItemNumber =" & Me.ItemNumber
由于包含连接运算符并未证明成功,因此我建议您的ItemNumber
字段可能是字符串数据类型,因此需要在SQL表达式中引用条件值:< / p>
"INSERT INTO SuspendedProducts SELECT * FROM Products WHERE ItemNumber ='" & Me.ItemNumber & "'"
这也可以写成:
"INSERT INTO SuspendedProducts SELECT * FROM Products WHERE ItemNumber =""" & Me.ItemNumber & """"
由于""
会在VBA中产生文字"
;但是,这个可读性稍差。
考虑到上述因素,最终的代码可能是:
CurrentDb.Execute _
"INSERT INTO SuspendedProducts " & _
"SELECT * FROM Products WHERE ItemNumber ='" & Me.ItemNumber & "'"
答案 1 :(得分:0)
LeeMac评论说Me.ItemNumber
可能是String
数据类型,并建议使用此解决方案:
CurrentDb.Execute "INSERT INTO SuspendedProducts
SELECT * FROM Products
WHERE ItemNumber ='" & Me.ItemNumber & "'"
June7建议更好的设计可能是在Products
表格中添加一个字段来指定某个项目是否被暂停,以避免移动记录。