我有动态建表的代码如下:query1.close;
query1.sql.clear;
query1.sql.add('begin transaction');
query1.execsql;
try
   query1.close;
   query1.sql.clear;
   query1.sql.add('create table .....');
   query1.execsql;
   query1.close;
   query1.sql.clear;
   query1.sql.add('commit');
   query1.execsql;
except
   query1.close;
   query1.sql.clear;
   query1.sql.add('rollback');
   query1.execsql;
end;
原来数据源是BDE,代码运行正常;现在改为ADO,query1是ADOQuery,
程序运行到 query1.sql.add('commit'); 后面的 query1.execsql处
提示错误。
 好象说是没有对应的Begin transaction,请问大虾是什么原因……  ………………Help………………!!!

解决方案 »

  1.   

    function RunSqlStr(SqlStr: String): Boolean;
    var
      TmpStr,TmpStr1 :string;
      i:integer;
    begin
       TmpStr := Trim(SqlStr);
       if TmpStr = '' then
       begin
         Result := False;
         Application.MessageBox('没有可以执行的DML!','提示',MB_ICONINFORMATION + MB_OK);
         Exit;
       end;
       with F_DataModule.Qry_Public do
       begin
         F_DataModule.DB_Public.StartTransaction;
         try
           i :=pos(RowSep,TmpStr);
           if (i = 0) and (TmpStr <> '') then
             i := Length(TmpStr) + 1;
           while i <> 0 do
           begin
             TmpStr1 :=Copy(TmpStr,1,i - 1);
             TmpStr :=Copy(TmpStr,i + 1,Length(TmpStr));
             i :=pos(RowSep,TmpStr);
             if (i = 0) and (Trim(TmpStr) <> '') then
               i :=Length(TmpStr) + 1;
             Close;
             Sql.Clear;
             Sql.Add(TmpStr1);
             //sql.SaveToFile('c:\windows\desktop\aaa.txt');
             Prepare;
             ExecSql;
           end;
           //ApplyUpdates;
           F_DataModule.DB_Public.Commit;
           Result := True;//提交成功
         except
           F_DataModule.DB_Public.RollBack;
           //CancelUpdates;
           Result := False;//提交不成功
         end;
       end;
    end;
      

  2.   

    如果query1.Connection是ADOConnection ,照下面改写:
    ADOconnection.BeginTrans; //开始事务
    try
       query1.close;
       query1.sql.clear;
       query1.sql.add('create table .....');
       query1.execsql;   ADOConnection.CommitTrans; //提交事务
    except
       ADOConnection.RollBackTrans;//回滚事务
    end;
      

  3.   

    分开写看看,一次提交完了之后你关闭了adoquery!