往数据库某字段中写入值,若该值已经存在与该字段,则终止该写入操作

时间:2022-01-29 15:35:31
表1:
----------------------
id    name     age
----------------------
1    张一        19
2    李二        18
3    黄三        19
4    高四        16
5    null      null
6    null      null
7    null      null
8    null      null
----------------------

1. 其中id是不为空的主键;
2. 现在我要为id=5这条记录添加name和age的值,但是我希望如果我此时提交的name已经存在的话,则弹出警告:“该人已经存在,请添加其他人!”,然后返回提交对话框的界面。

我的中心思想就是:name字段允许为空,但不允许出现不为空的相同记录
备注:id的值是我建好该数据表之后直接在表里面手动添加的,意味着该表的记录的行数已经固定了的。

请各位专家帮忙解决一下,十分感谢!!!!!!!!!!!

11 个解决方案

#1


你可以提交前,先查询记录,发现记录5存在,就弹出对话框警告,不存在就插入Update...

#2


你给name字段添加一个唯一索引。
你update的时候,如果值有相同名字的话会报错的,你捕捉一下异常就可以了

#3


首先,谢谢二位的回复。

对于1楼的回答,我想解释一下,现在我是已经知道记录5的name和age两个字段是空的,我要为记录5的这两个字段提交相应的值,但是如果我提交的值是“name = 李二”和“age=10”,那么由于我的数据表里面的记录2里已经有“李二”了,所以我希望此时会弹出警告已经有此人的信息的提示框。

对于2楼的回答,你的意思是不是将“name”设置为主键?那么这个字段的每条记录就要求必须唯一,但是在我这里行不通,因为正如我例子中,现在共有8条记录,第5条~第8条这四条记录的name都是空值(null),那么这四条记录的name字段在最初的时候都是相同的,所以就不能唯一了。


请各位朋友再帮我想想办法,再次谢谢!!!!!!!!!!!

#4



用不重复索引就好。Null 不构成重复。

#5


既然你先确认了记录5的name和age两个字段是空的,那么可以再做一次查询检查“name = 李二”和“age=10”的记录是否存在,
存在就报错,不存在就更新记录5。

#6



     Private Sub Command1_Click()
        Dim rstTmp As New ADODB.Recordset
        If Trim(Text1) = "" Then Exit Sub
        rstTmp.Open "select * from 表1 where name='" + Text1.Text + "' and ID <>5", Cn
        If Not rstTmp.EOF Then
            MsgBox "该人已经存在,请添加其他人!", vbOKOnly + vbExclamation, "提示"
            Exit Sub
        End If
        rstTmp.Close
        Set rstTmp = Nothing
        cn.execute "update ……"
     End Sub
        

#7


关注一下.......数据库这块要学习学习了........- -!

#8


update之前先判断name的值是否已经存在
另外,建议不用将关键字作为表名或字段名来使用,如:name

#9


在插入字段前,先判定id-->name是否为空,为空直接写入数据
当name字段值不为空时,循环recordset集,仅当没有相同数据时才写入数据

但我并不建议这样的操作在一张表中操作,这样当数据量大时,速度会明显下降
建议把这张表重新设计一下。

#10


首先感谢6楼提供的思路,我已经搞定了,给大家分享一下主要的代码:

<%  
dim ASDF
ASDF=trim(request("textfield"))

   If NOT IsEmpty (request("SaveEditSubmit")) then
       set rs=server.CreateObject("adodb.recordset")
       rs.Open "select * from port where id="&id,conn,1,3
       set rs3=server.CreateObject("adodb.recordset")
       rs3.Open "select * from port where name='" & ASDF & "' and id <>"&id , conn,1,3
    if not rs3.eof And not rs3.bof then               
       call MsgBox("该人已经存在,请添加其他人!","Back","None") 
       response.End
       rs3.Close 
       Set rs3 = Nothing
    else
       rs("name")=trim(request("textfield"))   
       rs.Update
       rs.Close
       set rs=nothing
       response.Write("<script >alert('Operation Success!');window.close()</script>")
       response.End
     End If
   End IF
%>


再次谢谢大家提供的帮助哈!


#11


谢谢9楼的建议,但是由于情况特殊,所以不得不把有些东西放在一张表里面。

#1


你可以提交前,先查询记录,发现记录5存在,就弹出对话框警告,不存在就插入Update...

#2


你给name字段添加一个唯一索引。
你update的时候,如果值有相同名字的话会报错的,你捕捉一下异常就可以了

#3


首先,谢谢二位的回复。

对于1楼的回答,我想解释一下,现在我是已经知道记录5的name和age两个字段是空的,我要为记录5的这两个字段提交相应的值,但是如果我提交的值是“name = 李二”和“age=10”,那么由于我的数据表里面的记录2里已经有“李二”了,所以我希望此时会弹出警告已经有此人的信息的提示框。

对于2楼的回答,你的意思是不是将“name”设置为主键?那么这个字段的每条记录就要求必须唯一,但是在我这里行不通,因为正如我例子中,现在共有8条记录,第5条~第8条这四条记录的name都是空值(null),那么这四条记录的name字段在最初的时候都是相同的,所以就不能唯一了。


请各位朋友再帮我想想办法,再次谢谢!!!!!!!!!!!

#4



用不重复索引就好。Null 不构成重复。

#5


既然你先确认了记录5的name和age两个字段是空的,那么可以再做一次查询检查“name = 李二”和“age=10”的记录是否存在,
存在就报错,不存在就更新记录5。

#6



     Private Sub Command1_Click()
        Dim rstTmp As New ADODB.Recordset
        If Trim(Text1) = "" Then Exit Sub
        rstTmp.Open "select * from 表1 where name='" + Text1.Text + "' and ID <>5", Cn
        If Not rstTmp.EOF Then
            MsgBox "该人已经存在,请添加其他人!", vbOKOnly + vbExclamation, "提示"
            Exit Sub
        End If
        rstTmp.Close
        Set rstTmp = Nothing
        cn.execute "update ……"
     End Sub
        

#7


关注一下.......数据库这块要学习学习了........- -!

#8


update之前先判断name的值是否已经存在
另外,建议不用将关键字作为表名或字段名来使用,如:name

#9


在插入字段前,先判定id-->name是否为空,为空直接写入数据
当name字段值不为空时,循环recordset集,仅当没有相同数据时才写入数据

但我并不建议这样的操作在一张表中操作,这样当数据量大时,速度会明显下降
建议把这张表重新设计一下。

#10


首先感谢6楼提供的思路,我已经搞定了,给大家分享一下主要的代码:

<%  
dim ASDF
ASDF=trim(request("textfield"))

   If NOT IsEmpty (request("SaveEditSubmit")) then
       set rs=server.CreateObject("adodb.recordset")
       rs.Open "select * from port where id="&id,conn,1,3
       set rs3=server.CreateObject("adodb.recordset")
       rs3.Open "select * from port where name='" & ASDF & "' and id <>"&id , conn,1,3
    if not rs3.eof And not rs3.bof then               
       call MsgBox("该人已经存在,请添加其他人!","Back","None") 
       response.End
       rs3.Close 
       Set rs3 = Nothing
    else
       rs("name")=trim(request("textfield"))   
       rs.Update
       rs.Close
       set rs=nothing
       response.Write("<script >alert('Operation Success!');window.close()</script>")
       response.End
     End If
   End IF
%>


再次谢谢大家提供的帮助哈!


#11


谢谢9楼的建议,但是由于情况特殊,所以不得不把有些东西放在一张表里面。