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

解决方案 »

  1.   

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

  2.   

    在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;
      

  3.   

    Hank(星星农场) ( )
    我試了一下他會有三個錯誤代碼葉。
      

  4.   

    CloneCenter(复制中心)
    我原來就是這麼做的。
    可是如果一個表當中有幾十萬條記錄的話,我感覺這樣好慢好慢。
      

  5.   

    TO:  ialgu123(有心事的人)
    你获取三个是因为后面的是提示你终止程序,一般情况下只是第一个代码!
    象你的情况在SQL Server下是2601,即在在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
          2601:
            begin
              Application.MessageBox('ia1 Must Be Only!',PChar(Application.Title),MB_OK+MB_ICONWARNING); //提示信息随便写了
              Action:=daAbort;
            end;
        end;
      end;
    多看看SQL Server的帮助,或者到sysmessage中查找相关序号