try
    begin
      sSql := 'SQL语句 1';
      DataModule2.Query2.Close;
      DataModule2.Query2.SQL.Clear;
      DataModule2.Query2.SQL.Add(sSql);
      DataModule2.Query2.ExecSQL;
      sSql := 'SQL语句 2';
      DataModule2.Query2.Close;
      DataModule2.Query2.SQL.Clear;
      DataModule2.Query2.SQL.Add(sSql);
      DataModule2.Query2.ExecSQL;
     
      。SQL语句3
      。SQL语句N
     DataModule2.Database1.Commit;
   end;
  except
    DataModule2.Database1.Rollback;
  raise;
 end; //end try 请问用到Query的CachedUpdates属性吗?
还有就是Query.ApplyUpdates与Query.ExecSQL;有什么区别,前者是在什么情况下用
而后者好象就是用来执行SQL语句的吧!好象前者一般都和Query2.CommitUpdates;搭配着用是吗另:DEPHI中执行SQL语句直接用TRY EXCEPT就可以截获SQL语句执行出错吗?
我记得PB中是直接从ODBC获得SQLCODE如果等于-1就证明SQL语句执行出错,不这段DEPHI是不是就用TRYEXCEPT扑获呢?

解决方案 »

  1.   

    Database1.StartTransaction
    try
      xxxxxx
      Database1.Commit;
    except
      Database1.Rollback
    end;
    TRY EXCEPT就可以截获SQL语句执行出错!
      

  2.   

    Query.ApplyUpdates:提交对Query中数据所做的修改,在修改完成后提交用的。
    Query.ExecSQL     :执行Query.Sql中的Sql语句,从数据库中取回结果集,执行查询时用。
      

  3.   

    那么问题2呢?Query.ApplyUpdates与Query.ExecSQL;有什么区别还有多个SQL只要写一个Database1.Commit;就可以了是吧
      

  4.   

    那么还用那个什么缓冲更新那东西不(用到Query的CachedUpdates属性吗)还有就是Query.ApplyUpdates与Query.ExecSQL;哪个是对数据库有真正的修改呢!
    好象前者只是缓冲更新吧!如果不COMMIT数据就不会真正的进入数据库吧!
      

  5.   

    请问用到Query的CachedUpdates属性吗?
    用到,因为你想一次性全部提交数据
    还有就是Query.ApplyUpdates与Query.ExecSQL;有什么区别,前者是在什么情况下用
    而后者好象就是用来执行SQL语句的吧!好象前者一般都和Query2.CommitUpdates;搭配着用是吗
    ApplyUpdates 和 CommitUpdates一般在修改数据时,即QUERY和UpdateSQL搭配使用时,而且CachedUpdates属性一般设成TRUE。
    如:
    with Query1 do
    try
      Edit;//or Insert ,Append
      FieldByName('Id').ASstring := Edit1.text;
      ...
      ApplyUpdates;
      CommitUpdates;
    except
      CancelUpdates;
      showmessage('error');
    end;
    Query.ExecSQL在当QUERY中SQL语句为非查询语句是使用。你的程序应该写成:
    CachedUpdates属性设成TRUEDataModule2.Database1.StartTransaction;
      try
        begin
          sSql := 'SQL语句 1';
          DataModule2.Query2.Close;
          DataModule2.Query2.SQL.Clear;
          DataModule2.Query2.SQL.Add(sSql);
          DataModule2.Query2.ExecSQL;
          sSql := 'SQL语句 2';
          DataModule2.Query2.Close;
          DataModule2.Query2.SQL.Clear;
          DataModule2.Query2.SQL.Add(sSql);
          DataModule2.Query2.ExecSQL;
         
          。SQL语句3
          。SQL语句N
         DataModule2.Database1.Commit;
       end;
      except
        DataModule2.Database1.Rollback;
      raise;
     end; //end try
      

  6.   

    TO : things(平) (枕流以洗耳,漱石以磨牙) ,最后废话一次!
    with Query1 do
    try
      Edit;//or Insert ,Append
      FieldByName('Id').ASstring := Edit1.text;
      ...
      ApplyUpdates;
      CommitUpdates;
    except
      CancelUpdates;
      showmessage('error');
    end;
    是不是等同与
    DataModule2.Query2.CachedUpdates := true;
    DataModule2.Database1.StartTransaction     
    try
        sSql := 'update table set field = 'values'';
        DataModule2.Query2.Close;
        DataModule2.Query2.SQL.Clear;
        DataModule2.Query2.SQL.Add(sSql);
        DataModule2.Query2.ExecSQL;
        DataModule2.Database1.Commit;
    except
        DataModule2.Database1.Rollback;
    raise;
    end;
    DataModule2.Query2.CachedUpdates := false;是这样吧
      

  7.   

    同意大飞虫的意见
    Query.ApplyUpdates:提交对Query中数据所做的修改,在修改完成后提交用的。
    Query.ExecSQL     :执行Query.Sql中的Sql语句,从数据库中取回结果集,执行查询时用。
      

  8.   

    Query.ApplyUpdates:提交对Query中数据所做的修改,在修改完成后提交用的。
    Query.ExecSQL     :执行Query.Sql中的Sql语句有多种可能!!
    还有多个SQL只要写一个Database1.Commit是可以的
      

  9.   

    TO : dickeybird888(于伟刚) 
    大飞虫的意见好象不对吧!
    Query.ExecSQL     用来执行不需要返回结果集的SQL语句
    Query.Open        才是执行可返回结果集的SQL语句的