Sql 使用“插入到VBA中不存在的位置”

Sql 使用“插入到VBA中不存在的位置”,sql,vba,ms-access,Sql,Vba,Ms Access,我在MS access中有一个可爱的表单和一张可爱的桌子(我保证)。我想在按下按钮时使用where not exists插入这个表,但我得到一个不太友好的运行时错误3067:“查询输入必须至少包含一个表或查询。” 我的查询已经 strSQL = "insert into tbl_MAP_systemTask (TaskID, SystemID) " & _ " Values (" & taskID & ", " & sysID &

我在MS access中有一个可爱的表单和一张可爱的桌子(我保证)。我想在按下按钮时使用where not exists插入这个表,但我得到一个不太友好的运行时错误3067:“查询输入必须至少包含一个表或查询。”

我的查询已经

strSQL = "insert into tbl_MAP_systemTask (TaskID, SystemID) " & _
            " Values (" & taskID & ", " & sysID & _
            ")  where not exists " & _
            " (select M.TaskID, M.SystemID from tbl_MAP_systemTask as M where M.TaskID = " & taskID & _
            " and M.SystemID = " & sysID & ");"

Debug.Print strSQL
DoCmd.RunSQL (strSQL)
strSQL现在是

insert into tbl_MAP_systemTask (TaskID, SystemID)  
Values (1, 1)  
where not exists  
(select M.TaskID, M.SystemID 
from tbl_MAP_systemTask as M where M.TaskID = 1 and M.SystemID = 1);
谁能解释一下
a) 我打碎了什么?
b) 如何修复它?

试试这个:

strSQL = "insert tbl_MAP_systemTask (TaskID, SystemID) " & _
            " select " & taskID & ", " & sysID & _
            " where not exists " & _
            " (select M.TaskID, M.SystemID from tbl_MAP_systemTask as M where M.TaskID = " & taskID & _
            " and M.SystemID = " & sysID & ");"
=>

对我来说似乎很有效。似乎不存在的
需要一个select语句,因此您必须像这样对insert进行建模。

尝试以下方法:

strSQL = "insert tbl_MAP_systemTask (TaskID, SystemID) " & _
            " select " & taskID & ", " & sysID & _
            " where not exists " & _
            " (select M.TaskID, M.SystemID from tbl_MAP_systemTask as M where M.TaskID = " & taskID & _
            " and M.SystemID = " & sysID & ");"
=>

对我来说似乎很有效。似乎不存在的
需要一个select语句,因此您必须像这样对insert进行建模。

尝试以下方法:

strSQL = "insert tbl_MAP_systemTask (TaskID, SystemID) " & _
            " select " & taskID & ", " & sysID & _
            " where not exists " & _
            " (select M.TaskID, M.SystemID from tbl_MAP_systemTask as M where M.TaskID = " & taskID & _
            " and M.SystemID = " & sysID & ");"
=>

对我来说似乎很有效。似乎不存在的
需要一个select语句,因此您必须像这样对insert进行建模。

尝试以下方法:

strSQL = "insert tbl_MAP_systemTask (TaskID, SystemID) " & _
            " select " & taskID & ", " & sysID & _
            " where not exists " & _
            " (select M.TaskID, M.SystemID from tbl_MAP_systemTask as M where M.TaskID = " & taskID & _
            " and M.SystemID = " & sysID & ");"
=>


对我来说似乎很有效。似乎不存在的
需要一个select语句,因此您必须像这样对insert进行建模。

也许您可以使用记录集来插入这些值

Dim rs as Recordset
Set rs = Currentdb.openRecordset("SELECT * FROM tbl_MAP_systemTask WHERE TaskID=" & Me.TaskID & " AND SystemID=" & Me.SystemID)

if not (rs.eof or rs.bof) then
 rs.addnew
 rs.TaskID = Me.TaskID
 rs.SystemID = Me.SystemID
 rs.update
end if

rs.close
set rs = nothing

也许可以使用记录集插入这些值

Dim rs as Recordset
Set rs = Currentdb.openRecordset("SELECT * FROM tbl_MAP_systemTask WHERE TaskID=" & Me.TaskID & " AND SystemID=" & Me.SystemID)

if not (rs.eof or rs.bof) then
 rs.addnew
 rs.TaskID = Me.TaskID
 rs.SystemID = Me.SystemID
 rs.update
end if

rs.close
set rs = nothing

也许可以使用记录集插入这些值

Dim rs as Recordset
Set rs = Currentdb.openRecordset("SELECT * FROM tbl_MAP_systemTask WHERE TaskID=" & Me.TaskID & " AND SystemID=" & Me.SystemID)

if not (rs.eof or rs.bof) then
 rs.addnew
 rs.TaskID = Me.TaskID
 rs.SystemID = Me.SystemID
 rs.update
end if

rs.close
set rs = nothing

也许可以使用记录集插入这些值

Dim rs as Recordset
Set rs = Currentdb.openRecordset("SELECT * FROM tbl_MAP_systemTask WHERE TaskID=" & Me.TaskID & " AND SystemID=" & Me.SystemID)

if not (rs.eof or rs.bof) then
 rs.addnew
 rs.TaskID = Me.TaskID
 rs.SystemID = Me.SystemID
 rs.update
end if

rs.close
set rs = nothing

不用子查询,你可以用域函数来实现

If Dcount("*", "tbl_MAP_systemTask", "TaskID = " & taskID & " AND SystemID = " &sysID) = 0 Then
    strSQL = "INSERT INTO tbl_MAP_systemTask (TaskID, SystemID) " & _
             " VALUES (" & taskID & ", " & sysID & ")
    CurrentDb.Execute strSQL
Else
    MsgBox "The Data already exists in the table, so nothing was added."
End If

不用子查询,你可以用域函数来实现

If Dcount("*", "tbl_MAP_systemTask", "TaskID = " & taskID & " AND SystemID = " &sysID) = 0 Then
    strSQL = "INSERT INTO tbl_MAP_systemTask (TaskID, SystemID) " & _
             " VALUES (" & taskID & ", " & sysID & ")
    CurrentDb.Execute strSQL
Else
    MsgBox "The Data already exists in the table, so nothing was added."
End If

不用子查询,你可以用域函数来实现

If Dcount("*", "tbl_MAP_systemTask", "TaskID = " & taskID & " AND SystemID = " &sysID) = 0 Then
    strSQL = "INSERT INTO tbl_MAP_systemTask (TaskID, SystemID) " & _
             " VALUES (" & taskID & ", " & sysID & ")
    CurrentDb.Execute strSQL
Else
    MsgBox "The Data already exists in the table, so nothing was added."
End If

不用子查询,你可以用域函数来实现

If Dcount("*", "tbl_MAP_systemTask", "TaskID = " & taskID & " AND SystemID = " &sysID) = 0 Then
    strSQL = "INSERT INTO tbl_MAP_systemTask (TaskID, SystemID) " & _
             " VALUES (" & taskID & ", " & sysID & ")
    CurrentDb.Execute strSQL
Else
    MsgBox "The Data already exists in the table, so nothing was added."
End If

TOP 1子句必须在主查询中

INSERT INTO tbl_MAP_systemTask (TaskID, SystemID)
SELECT TOP 1 1 AS TaskID 1 AS SystemID
FROM tbl_MAP_systemTask
WHERE NOT EXISTS (SELECT TOP 1 TaskID,SystemID FROM 
tbl_MAP_systemTask WHERE TaskID = 1 and SystemID=1);
如果
tbl\u MAP\u systemTask
表为空,或者如果表中只有一条记录,则子查询中必须省略TOP 1子句。
出于性能目的,我将Top 1子句包含在子查询中。

Top 1子句必须包含在主查询中

INSERT INTO tbl_MAP_systemTask (TaskID, SystemID)
SELECT TOP 1 1 AS TaskID 1 AS SystemID
FROM tbl_MAP_systemTask
WHERE NOT EXISTS (SELECT TOP 1 TaskID,SystemID FROM 
tbl_MAP_systemTask WHERE TaskID = 1 and SystemID=1);
如果
tbl\u MAP\u systemTask
表为空,或者如果表中只有一条记录,则子查询中必须省略TOP 1子句。
出于性能目的,我将Top 1子句包含在子查询中。

Top 1子句必须包含在主查询中

INSERT INTO tbl_MAP_systemTask (TaskID, SystemID)
SELECT TOP 1 1 AS TaskID 1 AS SystemID
FROM tbl_MAP_systemTask
WHERE NOT EXISTS (SELECT TOP 1 TaskID,SystemID FROM 
tbl_MAP_systemTask WHERE TaskID = 1 and SystemID=1);
如果
tbl\u MAP\u systemTask
表为空,或者如果表中只有一条记录,则子查询中必须省略TOP 1子句。
出于性能目的,我将Top 1子句包含在子查询中。

Top 1子句必须包含在主查询中

INSERT INTO tbl_MAP_systemTask (TaskID, SystemID)
SELECT TOP 1 1 AS TaskID 1 AS SystemID
FROM tbl_MAP_systemTask
WHERE NOT EXISTS (SELECT TOP 1 TaskID,SystemID FROM 
tbl_MAP_systemTask WHERE TaskID = 1 and SystemID=1);
如果
tbl\u MAP\u systemTask
表为空,或者如果表中只有一条记录,则子查询中必须省略TOP 1子句。
我已经包括了Top 1子句,它是用于性能目的的子查询。

很好,其中一个完成了这项工作。你是一位绅士和学者!很高兴听到这个消息。祝你好运:)好吧,那人干得不错。你是一位绅士和学者!很高兴听到这个消息。祝你好运:)好吧,那人干得不错。你是一位绅士和学者!很高兴听到这个消息。祝你好运:)好吧,那人干得不错。你是一位绅士和学者!很高兴听到这个消息。祝你好运:)不,这个抛出了一整组不支持的方法错误。不,这个抛出了一整组不支持的方法错误。不,这个抛出了一整组不支持的方法错误。不,这个抛出了一整组不支持的方法错误。