----------------------
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的时候,如果值有相同名字的话会报错的,你捕捉一下异常就可以了
你update的时候,如果值有相同名字的话会报错的,你捕捉一下异常就可以了
#3
首先,谢谢二位的回复。
对于1楼的回答,我想解释一下,现在我是已经知道记录5的name和age两个字段是空的,我要为记录5的这两个字段提交相应的值,但是如果我提交的值是“name = 李二”和“age=10”,那么由于我的数据表里面的记录2里已经有“李二”了,所以我希望此时会弹出警告已经有此人的信息的提示框。
对于2楼的回答,你的意思是不是将“name”设置为主键?那么这个字段的每条记录就要求必须唯一,但是在我这里行不通,因为正如我例子中,现在共有8条记录,第5条~第8条这四条记录的name都是空值(null),那么这四条记录的name字段在最初的时候都是相同的,所以就不能唯一了。
请各位朋友再帮我想想办法,再次谢谢!!!!!!!!!!!
对于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。
存在就报错,不存在就更新记录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
另外,建议不用将关键字作为表名或字段名来使用,如:name
#9
在插入字段前,先判定id-->name是否为空,为空直接写入数据
当name字段值不为空时,循环recordset集,仅当没有相同数据时才写入数据
但我并不建议这样的操作在一张表中操作,这样当数据量大时,速度会明显下降
建议把这张表重新设计一下。
当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
%>
再次谢谢大家提供的帮助哈!
<%
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的时候,如果值有相同名字的话会报错的,你捕捉一下异常就可以了
你update的时候,如果值有相同名字的话会报错的,你捕捉一下异常就可以了
#3
首先,谢谢二位的回复。
对于1楼的回答,我想解释一下,现在我是已经知道记录5的name和age两个字段是空的,我要为记录5的这两个字段提交相应的值,但是如果我提交的值是“name = 李二”和“age=10”,那么由于我的数据表里面的记录2里已经有“李二”了,所以我希望此时会弹出警告已经有此人的信息的提示框。
对于2楼的回答,你的意思是不是将“name”设置为主键?那么这个字段的每条记录就要求必须唯一,但是在我这里行不通,因为正如我例子中,现在共有8条记录,第5条~第8条这四条记录的name都是空值(null),那么这四条记录的name字段在最初的时候都是相同的,所以就不能唯一了。
请各位朋友再帮我想想办法,再次谢谢!!!!!!!!!!!
对于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。
存在就报错,不存在就更新记录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
另外,建议不用将关键字作为表名或字段名来使用,如:name
#9
在插入字段前,先判定id-->name是否为空,为空直接写入数据
当name字段值不为空时,循环recordset集,仅当没有相同数据时才写入数据
但我并不建议这样的操作在一张表中操作,这样当数据量大时,速度会明显下降
建议把这张表重新设计一下。
当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
%>
再次谢谢大家提供的帮助哈!
<%
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楼的建议,但是由于情况特殊,所以不得不把有些东西放在一张表里面。