SQL INSERT INTO VALUE语句使用带有变量

时间:2017-06-08 01:33:12

标签: sql access-vba ms-access-2013

我有两张桌子:

  • Tbl_Task - 具有进程的所有任务(TaskNum是唯一的.TaskName是我写给Tbl_Proc的东西)

  • Tbl_Proc - 将保留客户的每项任务的状态

创建新客户时,我正在使用close事件上的表单将每个任务从Tbl_Task写入Tbl_Proc。我正在使用表单中的客户名称来完成Tbl_Proc中的记录。

我的想法是使用一个整数来递增TaskNum并将任务编号TaskName分配给Tbl_Proc [ProcTaskName]。然后循环遍历所有任务编号。如您所见,我坚持使用整数变量。

这就是我所拥有的。我可以成功写出公司名称,但我无法获得ProcTaskName:

Private Sub Form_Close()
    On Error GoTo Err_Form_Close

    Dim strCompany As String
    Dim sqls As String
    Dim x As Integer

    strCompany = Me![CoName]
    'MsgBox strCompany
    x = 1

    sqls = "INSERT INTO Tbl_Proc(ProcCo, ProcTaskName)" & _
                    "VALUES ('" & strCompany & "', SELECT TaskName FROM Tbl_Task WHERE TaskNum=""" & x & """)"
    DoCmd.RunSQL sqls
'This works - "VALUES ('" & strCompany & "', 'cat')"

Exit_Form_Close:
    Exit Sub

Err_Form_Close:
    MsgBox Err.Description
    Resume Exit_Form_Close

End Sub

2 个答案:

答案 0 :(得分:2)

如果我理解你的问题是正确的,你希望你的sql看起来像这样:

INSERT INTO Tbl_Proc(ProcCo, ProcTaskName)
    SELECT <yourCompanyVariable>, TaskName 
    FROM Tbl_Task 
    WHERE TaskNum=<whateverItIsYouHaveHere>

选择将返回所有具有您给定号码的任务,每个任务都标有您的公司变量。所有这些都将插入到您的表中。

如果您可以轻松地在tbl_task中定义所需的所有内容,例如where defaultTasks = 1,您可以在一个查询中插入所需的所有任务,而无需循环。

答案 1 :(得分:0)

感谢非常需要裤子的输入男人...... :) 我向Tbl_Tasks [TaskDefault]添加了另一列,并将所有值设为1。 以下代码适用于Microsoft Access 2013 VBA模块。

sqls = "INSERT INTO Tbl_Proc(ProcCo, ProcTaskName)" & _
        "SELECT '" & strCompany & "', TaskName " & _
        "FROM Tbl_Task WHERE TaskDefault=1"
DoCmd.RunSQL sqls