为什么要用二个TIBTrasaction

解决方案 »

  1.   

    因为在TTable在编辑中的时候要使用SQL查询,一个Trasaction时,调用SQL,Table就会自动RollBack,而抢先Commit Table又不能给用户Cancel的选择。我想到的,最简单的解决方法就是使用两个Transcation
      

  2.   

    不要用Ttable构件连接interbase表
    不要直接修改interbase表;
    应在本地用paradox临时表insert update,delete
    然后post 回interbase 表
      

  3.   

    zjpyb的方法可以一试,但是现在程序已经很大了,再进行这种更改需要很多时间,还有其他的解决方法吗?
      

  4.   

    将 IBTransaction1 先 Close 再 Open 就可以了
      

  5.   

    我试过
    IBTransaction1.Active := False;
    IBTransaction1.Active := True;
    但是也没用
      

  6.   

    你是用一个 TIBDataBase 吧?
    将她 先 Close 再 Open 试试你为什么用 两个 TIBTransaction 呢?
      

  7.   

    如果不用bde呢?
    BTW:
        bde连接InterBase6时,TDataBase的Params如何设置,SQLDialect如何设置。
      

  8.   

    function ConnectDb(Const ausername:string):boolean;
    begin
        result:=false;
        with Curdatabase do
        begin
             close;
             loginprompt:=false;
             keepconnection:=true;
             drivername:='intrbase';
             databasename:='Myhsjt';
             params.clear;
             params.add('SERVER NAME=d:\hsjt\db\hsjt.gdb');
             params.add('USER NAME=sysdba');
             params.add('OPEN MODE=READ/WRITE');
             params.add('SCHEMA CACHE SIZE=8 ');
             params.add('SQLPASSTHRU MODE=SHARED NOAUTOCOMMIT');
             params.add('SCHEMA CACHE TIME=-1');
             params.add('MAX ROWS=-1');
             params.add('BATCH COUNT=200');
             params.add('ENABLE SCHEMA CACHE=FALSE');
             params.add('ENABLE BCD=FALSE');
             params.add('BLOBS TO CACHE=64');
             params.add('BLOB SIZE=32');
             params.add('WAIT ON LOCKS=FALSE');
             params.add('COMMIT RETAIN=FALSE');
             params.add('PASSWORD=wxlx888');
             try
               open;
               result:=true;
             except
               exit;
             end; 
        end;
    end;
    SQLDialect不须设置
      

  9.   

    感谢zjqyb的热心解答,不知道你用的哪版InterBase,不过在我这里InterBase6.0.1当SQLDialect设为1时不支持时间类型。错误信息如下:General SQL error
    Data type unknown
    Client SQL dialect 1 does not support reference to DATE datatype
      

  10.   

    我用的也是InterBase6.0.1不过我现在已经不再使用date or datetime or timestamp类型
    我的经验是用字符型代替,这样效率和灵活性多不错
    我自己做了几个date/char char/date的function 就ok