因为插入重复键值触发的错误代码(err.num)是可变的,所以我的方法是判断err.descript中是否包含Primary Key字符串,但是我认为这不太正规,请教各位高手:有没有更好的判断方法?

解决方案 »

  1.   

    在保存之前先判断啊
    selec * from  table where 关键字='你输入的'
    如果查到结果就说明是重复了。明白了?
      

  2.   

    SQL Server 中可以写一个存储过程create  PROCEDURE up_test
    @ID int,
    @Date datetime,     ---传入的参数
    @WorkMode char(1),
    @No varchar(10) ASif exists(Select * from  table  where ID = @tID )  ---存在时
       update  table  set  更新的内容  where  条件
    else  ----不存在时插入
       insert into table (fields1……) values(@one,……)这样比较好,因为所有的修改与插入都由数据库自己完成,你只管将参数往里传
      

  3.   

    可以用RecordSet的Find 的方法来判断是否有重复的主键!如果它的Eof 不等于False就是找不到记录!
      

  4.   

    1,只要表中字段是不能重复的,数据库发现插入重复值会直接报错
    err:
      if err.number=重复错误编号 then msgbox "该姓名重复!"
    2,建议写储存过程create procedure st_instervalue
    @name as varchar(20)
    as
    decalre @iid int
    select @iid=id from 表名 where name=@name
    if @iid is not null return 1
    insert into 表名(name) values(@name)
    return 0
    直接在vb里面调用该过程,得到返回值
    1为该姓名重复
    0为插入成功3,在vb里面也可以用一条语句得到是否重复
    dim name as string
    rs.open "select id from 表名 where name'" & name & "'"
    if not rs.eof then
      rs.close
      msgbox "该姓名重复!"
    else
      rs.close
      rs.open "insert into 表名(name) value('" & name & "')"
    end if
      

  5.   

    谢谢各位精彩的回答。不过还是没有回答我的问题。
    1、先查询是个好办法,但是对于这样的情况效率可能比较低,如:可以预期,插入的记录重复的机会非常少,但是有可能重复,这时如果插入的记录数很大的话,效率会比较低。而如果直接插入后,判断错误码的处理效率就会高得多。
    2、我不太喜欢使用存储过程,我也知道存储过程有很多优点,但是它也有一些缺点,如可移植性差,如果升级的话,还要更新数据库,太麻烦。再说了,直接使用SQL语句,数据的处理也是由数据库来完成,只是没有将语句预编译而已。
    3、我的主要目的是想知道,一般情况下,怎样判断返回的错误码才是最正确的方法(针对重复键值,因为重复键值的错误码不固定)。