DELPHI 如何在 ADO post 前截取SQL RAISERROR 错误提示?SQLSERVER2000中 A表在DELPHI中用POST提前数据,其有有触发器
比如:
if ( Select Count(1)  From B t1
                   )  > 0
BEGIN
     ROLLBACK TRAN
     RAISERROR( '~$~入库数量不能大于计划数量!^|^',18,18)
     GOTO H_Error
END  如何能在post前获得这错误并在DELPHI中提示,并且不会提交数据呢?还要不能出错?请教大家

解决方案 »

  1.   

    可金蝶k3程序就行啊,他是用vb的,我们在触发器判断个东西,如果条件满足就RAISERROR出错,则前台会提示RAISERROR的错误并且不会保存这是如何弄?
      

  2.   

    你看过金蝶k3的代码没有?也许它就是用存储过程来保存数据的,满足条件才post吧
      

  3.   


     try except
       on E : EADOError do
       raise Exception.Create(e.Message)
     end;这样来处理。
      

  4.   

    最起码要执行过存储过程才能得到错误信息吧,在DELPHI中用就TRY EXCEPT就可以得到错误信息了。
      

  5.   

    if ( Select Count(1)  From B t1
                       )  > 0
    我觉得写得不够严密
    如果你的库里是空的这句话也成立
    因此建议改成
    if ( Select 1  From B t1
                       )  > 0
    当数据库为空的时候 这句话返回的0,而上面的那就话则返回的是1
      

  6.   


    这样还可以,是不是写在POSTERROR里面呢?应该能够截取的到的。至少K3是如何处理的就不清楚了!
      

  7.   

    楼上说的SELECT语句的问题这里暂且不谈,如果改成你那样 数据库记录要是多就没有效率了!
    还是再请教看有没有人知道DELPHI取得SQL RAISEERROR错误的问题吧?谢谢
      

  8.   

    Post之前加个起个事务.Post错误的时候回滚事务.Post成功后提交事务
      

  9.   

    post错误时,该如何取到SQL中RAISEERROR里面的字符内容呢?该如何去判断是哪个错误?
      

  10.   

    ADOQUERY应该有个onposterror事件. 在里面应该能取到. 但记录还是会写进去的. 所以才让开个事务. 你可以试试.
      

  11.   

    另外. ADO post 前截取错误是不可能的. 数据不POST, 怎么会触发你的触发器呢?是不是!
      

  12.   

    是有个posterror,但要如何写如何取得错误呢?能不能详细说说?非常感谢。
      

  13.   

    楼上好像已经说过了 要用try 和 catch 
      

  14.   


    //try it 
    with TADOconnection.creat(nil) do
        try
            connection:=conn;//conn是你的连接字符串
            conn.BeginTrans;
            try
            .....
            .....
        finally
            free;
        end;
        except
            on E: Exception do
            begin
                conn.RollbackTrans;
            end;
        end;
      
         
      

  15.   

    漏了提交了~~不好意思~~//try it 
    with TADOconnection.creat(nil) do
        try
            connection:=conn;//conn是你的连接字符串
            conn.BeginTrans;
            try
            .....
            .....
            conn.CommitTrans;
        finally
            free;
        end;
        except
            on E: Exception do
            begin
                conn.RollbackTrans;
                showmessagebox(e.message)
            end;
        end;
      

  16.   

    漏了提交了~~不好意思~~//try it 
    with TADOconnection.creat(nil) do
        try
            connection:=conn;//conn是你的连接字符串
            conn.BeginTrans;
            try
            .....
            .....
            conn.CommitTrans;
        finally
            free;
        end;
        except
            on E: Exception do
            begin
                conn.RollbackTrans;
                showmessagebox(e.message)
            end;
        end;