使用MS Access表单控件将记录从一个表复制到另一个表

时间:2018-03-18 22:26:05

标签: sql database vba ms-access

我有一个MS Access数据库,其中包含一个基于查询的表单,其中包含从几个表中获取的简化数据。两个相关表中的主键(ItemNumber)都存在于表单所基于的查询中。

我希望能够使用按钮将记录从表Products移动到SuspendedProducts - 所以三部分过程:

  1. 选择具有与当前在表单中选择的项目编号相同的商品中的记录

  2. 将此记录复制到SuspendedProducts

  3. 从产品中删除

  4. 只是为了让它复制记录,我尝试了一些东西,但似乎都没有。在VBA我写过

    "INSERT INTO SuspendedProducts SELECT * FROM Products WHERE ItemNumber =" Me.ItemNumber
    

    但它没有将任何内容复制到SuspendedProducts中。轻微的变化使它什么都不做,或者让它抱怨语法错误。

2 个答案:

答案 0 :(得分:2)

由于评论中已经解决了这个问题,我会将我的建议作为答案发布,以便将此问题标记为已解决。

您当前的代码基本上存在三个问题:

  • 执行您构造的SQL表达式需要CurrentDb.ExecuteDoCmd.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表格中添加一个字段来指定某个项目是否被暂停,以避免移动记录。