Sql 使用“插入到VBA中不存在的位置”
我在MS access中有一个可爱的表单和一张可爱的桌子(我保证)。我想在按下按钮时使用where not exists插入这个表,但我得到一个不太友好的运行时错误3067:“查询输入必须至少包含一个表或查询。” 我的查询已经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 &
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子句,它是用于性能目的的子查询。很好,其中一个完成了这项工作。你是一位绅士和学者!很高兴听到这个消息。祝你好运:)好吧,那人干得不错。你是一位绅士和学者!很高兴听到这个消息。祝你好运:)好吧,那人干得不错。你是一位绅士和学者!很高兴听到这个消息。祝你好运:)好吧,那人干得不错。你是一位绅士和学者!很高兴听到这个消息。祝你好运:)不,这个抛出了一整组不支持的方法错误。不,这个抛出了一整组不支持的方法错误。不,这个抛出了一整组不支持的方法错误。不,这个抛出了一整组不支持的方法错误。