我用TTable和TQuery做了两个功能相同的程序,程序操作的数据表有一字段被设计成
不允许重复的,我为了在程序添加数据时添加了重复的字段时提示,分别在两个控件的OnPostError事件插入代码显示错误,但是问题出来了,用TTable做的程序可以显示错误,可是用TQuery做的程序不能显示错误,在TQuery的OnPostErrorr事件插入的相同代码,没有反映!这是为什么?请告知!

解决方案 »

  1.   

    sorry,我临时有事。
    我刚才试验了一下,没有发现你说的现象。
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Query1.Insert;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      Query1.Post;
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
      Query1.Delete;
    end;procedure TForm1.Button4Click(Sender: TObject);
    begin
      Query1.Cancel;
    end;procedure TForm1.Query1PostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    begin
      ShowMessage(e.Message);
    end;
    当我录入重复的数据,然后点击保存的时候,给出了错误提示
      

  2.   

    我想做的是根据错误代码显示自己的错误信息!
    还有我是用Query1.SQL.Add,sql语句操作数据库的不是insert
      

  3.   

    如果是数据库的添加是要用insert!如果没有是不能提交的!我建议你写出全部代码!
      

  4.   

    看看Query是否可以更新数据库,否则update也没有用,如Requestlive。
      

  5.   

    sql.add('insert into tablename');
      try
        execsql;
      except 
       自己的错误代码
      end;
      

  6.   

    try
        Query1.Close;
        Query1.SQL.Clear;
        Query1.SQL.Add('INSERT INTO PRODUCE ');
        Query1.SQL.Add('(ID,NAME,PRICE) ');
        Query1.SQL.Add('VALUES ');
        Query1.SQL.Add('('''+Edit1.Text +''','''+Edit2.Text +''','+Edit3.Text+')');
        showmessage(Query1.SQL.Text);
        Query1.ExecSQL;
       except
        on E:Exception do
           begin
           str((E as EDBEngineError).Errors[0].ErrorCode,s);
           showmessage(s);
           end;
        end;我把程序改成这样了!看来在Query控件里用sql操作数据库是处发不了OnPostError事件的!
      

  7.   

    我也是这样认为的,使用sql语句操作数据库无法触发OnPostError,所以应该在
    执行该语句的地方手动捕获并处理异常
      

  8.   

    你在OnPostError事件中将Action设置成daFail看看
      

  9.   

    try
      Post;
    except
      \\\
    end
      

  10.   

    对了 用post 在提交的时候 用try except end 就可以了
    不用在 OnPostError时候响应事件。