在将数据添加到访问数据库之前检查重复的条目

时间:2018-10-15 04:54:31

标签: sql vba ms-access

我正在尝试使用vbscript添加数据以访问数据库。我可以成功将数据添加到数据库,但是我想在将数据添加到数据库之前检查重复性。

如果在三列中的任何一列中发现重复,则应在“名称,电话和ID”列中进行检查,然后显示发现重复的消息。

下面是帮助我向数据库添加数据的代码。

sub addUser
    SQL_query = "INSERT INTO dvd (timestammp,Name,Phone,Id,Cat,StartDate,agent,amount,source,conver) VALUES ('"& txtteNow.value &"','"& txtName.value &"','"& txtPhone.value &"','"& txtId.value &"','"& txtCat.value &"','"& txtStartDate.value &"','"& txtsrch.value &"','"& txtamount.value &"','"& txtsource.value &"','"& txtconver.value &"')"
    conn.Execute(SQL_query
end sub 

我也尝试下面的代码,但是不起作用。

SQL_query = "INSERT INTO dvd (timestammp,Name,Phone,Id,Cat,StartDate,agent,amount,source,conver) VALUES('"& txtteNow.value &"','"& txtName.value &"','"& txtPhone.value &"','"& txtId.value &"','"& txtCat.value &"','"& txtStartDate.value &"','"& txtsrch.value &"','"& txtamount.value &"','"& txtsource.value &"','"& txtconver.value &"') WHERE NOT EXISTS (Select '2' from dvd  where Name = + " & txtName.value & + "
conn.Execute(SQL_query)

2 个答案:

答案 0 :(得分:2)

为什么不尝试在名称,电话和ID中添加唯一索引? 这样数据库引擎将自动丢弃那些记录。
可能的缺点:您将不知道删除了哪个记录。

答案 1 :(得分:1)

我的解决方案非常复杂:使用包含一个记录的虚拟表中的INSERT INTO ... SELECT查询,然后在其中使用NOT EXISTS

我也将使用参数,您确实应该自己做些以避免SQL注入问题。

CurrentDb是DAO数据库对象。

我将仅使用3个字段来简化解决方案。

With CurrentDb.CreateQueryDef("", "INSERT INTO dvd (timestammp,Name,Phone) " & _ 
    " SELECT p1, p2, p3" & _
    " FROM (SELECT First(ID) FROM MSysObjects) As Dummy" & _
    " WHERE NOT EXISTS(SELECT 1 FROM dvd WHERE Name = p1)"
    .Parameters("p1") = txtteNow.value
    .Parameters("p2") = txtName.value
    .Parameters("p3") = txtPhone.value
    .Execute
End With