在SQL當中的一個表當中建立兩個字段 ia1,ia2 其中ia1為主鍵。
在Delphi當中用Insert 語句的時候如果插入值有和ia1當中有重復的他就指示主鍵重復
我想問一下有什麼方法能在這個信息指示之前攔結他,改為用戶自已的showmessage
呢。如果有原代碼最好了。
如果插入語句寫在存儲過程當中的話提示信息如何返回客戶端。。
                                               謝謝各位大俠請指教

解决方案 »

  1.   

    try
      query.execsql;
    except
      on e:tdberror do
     showmessage(e.message);
    end;
      

  2.   

    你可以做一个存储过程,传入ia1,ia2,在存储过程中处理主键重复的异常,根据插入成功与否返回结果,比如返回0表示成功,返回1表示主键冲突
      

  3.   

    在ADOQuery的OnPostError事件中写代码var
      I: Integer;
    begin
      for I:=0 to MainData.adcConn.Errors.Count-1 do
      begin
        case MainData.ADOConnection.Errors.Item[I].NativeError of
          -105121349:
            begin
              Application.MessageBox('XXX Must Be Only!',PChar(Application.Title),MB_OK+MB_ICONWARNING);
              Action:=daAbort;
            end;
        end;
      end;至于-105121349等数字不同数据库有不同的错误代码,-105121349是Access的唯一值错误代码,SQL Server2000的好像是2601,你用这个过程测一下即可!var
      I: Integer;
    begin
      for I:=0 to MainData.adcConn.Errors.Count-1 do
      begin
        ShowMessage(IntToStr(MainData.ADOConnection.Errors.Item[I].NativeError));
    //          Action:=daAbort;
            end;
        end;
      end;
      

  4.   

    同意 Hank(星星农场)
    你还可以加入其他的错误代码,做成一个通用的错误显示过程。
    具体的错误代码,可以参考sql server 的online book。