用delphi+ado+sql做开发  用户在添加记录时,可能会录入系统中已存在的记录(具有相同主键值的记录已存在),会发生主键冲突异常;在此想请教大家:在程序中,如何针对此作异常处理?
现在自己的想法是希望通过程序捕捉到异常,然后作处理;但是不知道如何捕获这类异常?并且要具体的知道是键值冲突所引起的异常,而不是笼统的异常处理。  希望能得到大家的帮助,也欢迎提供其他的解决方法,谢谢! :)

解决方案 »

  1.   

    procedure TMSPListForm.MRPQueryBeforePost(DataSet: TDataSet);
    begin
      if FieldByName('PREGDS').AsString = '' then
          Raise Exception.Create('字段:"预计货号"不能为空,请重新填写后再提交!');
    end;
      

  2.   

    使用oracle时,针对每种数据库的错误都有一个编号,不知道sql server有没有,如果有,可以使用这个编号控制。
      

  3.   

    Drate(鸟窝里的虫):
      我的问题是想解决键值重复问题,而不是检测数据值是否为空。
      

  4.   

    idilent():   曾经想找sql server 数据库错误代码或者类型,但是不知道该怎么找,没有找到!  
      

  5.   

    tonghaibinfc(冰山一角) :  我也曾想过你所提到的方法,结果还是有问题:  当添加新的记录时,查找键值是否存在,存在则不提交,但是在修改记录时,由于该记录键值是已经存在的,所以修改的数据无法提交。
    我想,可能是我判断键值是否存在的方法有问题?这段代码该怎么写才不会出现这样的问题?
      

  6.   

    你可以测试一下,输入一个错误的值,然后得到SQL的错误号,然后再对这个号码进行错误处理。应该是像idilent说的那样吧!
      

  7.   

    用锁,在更改时用排他锁,锁定记录.连接前,设置动态游标,更改后及时更新.如:ADO中的 ADODATASET1.LUCKTYPE和ADODATASET1.CURROS属性的设置值
      

  8.   

    Erice(白雪公猪) :  能说说具体的做法吗?比如提供个范例?