怎样查看数据库中是不是已存在某条记录 ?

时间:2022-11-19 20:48:41
在数据库中,两条记录的 A 项和 B项 是不能完全相同的 

那我插入新数据时,怎么判断数据库中已有了相同数据,从而不允许插入?

13 个解决方案

#1


先 Select 看有没有记录
rst.open "select * from table where field1='a' and ..."
if not rst.eof then
msgbox "有这条记录"
end if

#2


select * from table where field='a' and ...
if (@@rowcount=0)
insert into table values('a',...)

#3


我用的是Data控件
查表中是否存在A,若不存在,在查表中是否有同一条记录中含有B和C,若有,提示

#4


设置该列为主键,直接Insert时如果有重复,就会报错。

#5


机车号  设备号   厂家
 1      123     高科

规定,机车号唯一,且设备号和厂家同时唯一
例如,数据库中已存在上面的数据,如果再插入数据机车号为1,则提示已存在该数据,是否需要覆盖。
如果插入 2 123 高科 则提示修改设备号和厂家

但如果插入 3  123   天象,则是允许的,或者 4 885 高科 也是正确的

现在我不知道怎么判 要插入的设备号和厂家是不是同时存在与一条记录
用的data控件
先用的seek,又用的nomatch ,判是不是有相同的机车号
但我发现 无论seek多少次,好象nomatch的值不变
请大家帮忙看看,还有什么办法,谢谢
下面是我的代码
mainForm.Data1.Recordset.Index = "product"
                mainForm.Data1.Recordset.Seek "=", Trim(trainTxt.Text)
                If mainForm.Data1.Recordset.NoMatch = True Then '没有相同的机车号
                    mainForm.Data1.Recordset.Index = "product"
                    mainForm.Data1.Recordset.Seek "=", Trim(productTxt.Text)
                    If mainForm.Data1.Recordset.NoMatch = True Then '没有相同的设备ID
                        
                    Else '有相同的设备ID
                         mainForm.Data1.Recordset.Index = "product"
                         mainForm.Data1.Recordset.Seek "=", Trim(ComboFtry.Text)
                         If mainForm.Data1.Recordset.NoMatch = True Then '没有相同的厂家
                         
                         Else '有相同的厂家
                            MsgBox "数据库中已有相同记录,请修改厂家号或设备ID", 64, "提示"
                            Exit Sub
                         End If
                    End If
                    Data1.Recordset.AddNew
                    Data1.Recordset.Fields(0) = Trim(trainTxt.Text)
                    Data1.Recordset.Fields(1) = Trim(AddZeroSatisfy(productTxt.Text))
                    Data1.Recordset.Fields(2) = Trim(ComboFtry.Text)
                    Data1.Recordset.Fields(3) = Trim(ComboFrqz.Text)
                    Data1.Recordset.Update

#6


帮忙看看吧

#7


UP

#8


不用data 控件,用ado 对象,还要注意你的数据库打开方式,就是,adopenstatic,adlock..换一换试试

#9


你的index都是product,当然不会seek到其他字段了。

#10


我是在改之前的人做的程序
所以数据库什么的都不改
只要最快实现那个功能

To XLYT(雨田) :那个product是怎么来的?我没看到关于它的定义,以为随便一个值就可以

#11


那就不要用什么index了,直接select多简单。

#12


原来的程序里是这么用的
我在改别人的程序

#13


有没有谁能帮忙看看啊
着急着呢

#1


先 Select 看有没有记录
rst.open "select * from table where field1='a' and ..."
if not rst.eof then
msgbox "有这条记录"
end if

#2


select * from table where field='a' and ...
if (@@rowcount=0)
insert into table values('a',...)

#3


我用的是Data控件
查表中是否存在A,若不存在,在查表中是否有同一条记录中含有B和C,若有,提示

#4


设置该列为主键,直接Insert时如果有重复,就会报错。

#5


机车号  设备号   厂家
 1      123     高科

规定,机车号唯一,且设备号和厂家同时唯一
例如,数据库中已存在上面的数据,如果再插入数据机车号为1,则提示已存在该数据,是否需要覆盖。
如果插入 2 123 高科 则提示修改设备号和厂家

但如果插入 3  123   天象,则是允许的,或者 4 885 高科 也是正确的

现在我不知道怎么判 要插入的设备号和厂家是不是同时存在与一条记录
用的data控件
先用的seek,又用的nomatch ,判是不是有相同的机车号
但我发现 无论seek多少次,好象nomatch的值不变
请大家帮忙看看,还有什么办法,谢谢
下面是我的代码
mainForm.Data1.Recordset.Index = "product"
                mainForm.Data1.Recordset.Seek "=", Trim(trainTxt.Text)
                If mainForm.Data1.Recordset.NoMatch = True Then '没有相同的机车号
                    mainForm.Data1.Recordset.Index = "product"
                    mainForm.Data1.Recordset.Seek "=", Trim(productTxt.Text)
                    If mainForm.Data1.Recordset.NoMatch = True Then '没有相同的设备ID
                        
                    Else '有相同的设备ID
                         mainForm.Data1.Recordset.Index = "product"
                         mainForm.Data1.Recordset.Seek "=", Trim(ComboFtry.Text)
                         If mainForm.Data1.Recordset.NoMatch = True Then '没有相同的厂家
                         
                         Else '有相同的厂家
                            MsgBox "数据库中已有相同记录,请修改厂家号或设备ID", 64, "提示"
                            Exit Sub
                         End If
                    End If
                    Data1.Recordset.AddNew
                    Data1.Recordset.Fields(0) = Trim(trainTxt.Text)
                    Data1.Recordset.Fields(1) = Trim(AddZeroSatisfy(productTxt.Text))
                    Data1.Recordset.Fields(2) = Trim(ComboFtry.Text)
                    Data1.Recordset.Fields(3) = Trim(ComboFrqz.Text)
                    Data1.Recordset.Update

#6


帮忙看看吧

#7


UP

#8


不用data 控件,用ado 对象,还要注意你的数据库打开方式,就是,adopenstatic,adlock..换一换试试

#9


你的index都是product,当然不会seek到其他字段了。

#10


我是在改之前的人做的程序
所以数据库什么的都不改
只要最快实现那个功能

To XLYT(雨田) :那个product是怎么来的?我没看到关于它的定义,以为随便一个值就可以

#11


那就不要用什么index了,直接select多简单。

#12


原来的程序里是这么用的
我在改别人的程序

#13


有没有谁能帮忙看看啊
着急着呢