我有一个VBA程序(在表格后面)执行以下操作; -
从XML导入数据后,我希望能够捕获同一文件尝试导入两次的场景(即临时表包含备份表中也存在的ID),告诉用户通过msgbox,然后退出Sub。
我原本以为可以通过错误代码处理来尝试追加,捕获有关重复键的错误。
我有一个附加查询要附加到备份,如果我通过查询本身运行此查询,我会收到有关重复项的警告等,并可选择继续运行查询。
但是,我是通过OpenQuery在VBA中执行此操作(并且已关闭警告),所以没有任何反应?我似乎无法捕获错误代码。
我尝试编写一个select查询以识别任何重复的ID,然后以某种方式检测该查询是否返回任何行,但也无法使其工作,因为无法找到检测查询是否返回任何行的方法。
答案 0 :(得分:0)
“我是通过OpenQuery在VBA中执行此操作(并且已关闭警告),所以没有任何反应?我似乎无法捕获错误代码。”
关闭SetWarnings
会抑制一般信息,因此这就是您未出现预期错误消息的原因。许多有经验的Access开发人员建议关闭SetWarnings
是一个坏主意。有关SetWarnings
关闭后排除故障的详细信息,请参阅this SO question。
由于您有“追加查询”,请使用DAO.Database .Execute
方法执行该操作,而不是使用OpenQuery
。
Dim db As DAO.Database
Dim strInsert As String
strInsert = "INSERT INTO backup_table(ID, fld1, fld2)" & vbCrLf & _
"SELECT ID, fld1, fld2 FROM temp_table"
Set db = CurrentDb
db.Execute strInsert, dbFailOnError
当SetWarnings
开启(True
)时,如果备份表已包含您要添加的ID
值,则该方法会因密钥违规而触发错误消息。
另外,如果你想要重复的计数,这个查询应该给你。
SELECT Count(*) AS count_of_duplicates
FROM
temp_table AS t
INNER JOIN backup_table AS b
ON t.ID = b.ID
如果您想在temp_table
中插入不重复的backup_table
行,请尝试这样的查询......
INSERT INTO backup_table(ID, fld1, fld2)
SELECT t.ID, t.fld1, t.fld2
FROM
temp_table AS t
LEFT JOIN backup_table AS b
ON t.ID = b.ID
WHERE b.ID Is Null