事务出错the transaction isolation level must be dirty read for local databases
Query2.close;
         Query2.Sql.clear;
         Query2.SQL.Add('insert into userr (usernam,psw) values (:usname,:psww)');
         Query2.ParamByName('usname').asstring:=ComboBox1.Text;
         Query2.ParamByName('psww').asstring:=pssword;
         //psword:= Query1.FieldValues['psw'];
         //psw:= form1.UncrypKey(psw,'123456');
         //psword.Text:=psw;
         Database1.StartTransaction; //开始事务控制
           try
             Query2.ExecSQL; //开始插入记录
             Database1.Commit; //提交事务
           except
             Query2.Free; //如果出错首先将Query Free掉
             Database1.RollBack; //回退事务
             raise; //重新引发异常,以通知用户
           end;
           Query2.free;

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      Query2 : TQuery;
    begin
      Query2 := TQuery.Create(nil);
      Query2.DatabaseName := 'db';
      try
        database1.StartTransaction;
        try
          with Query2 do
          begin
            close;
            sql.Clear;
            sql.Add('insert into userr (usernam,psw) values (:usname,:psww)');
            ParamByName('usname').asstring:=edit1.Text;
            ParamByName('psww').asstring:=edit2.text;
            ExecSql;
          end;
          database1.Commit;
        except
          database1.Rollback;
          raise;
          {*
          on e:exception do
          begin
            Database1.RollBack; //回退事务
            showmessage(e.Message);
          end;
          *}
        end;
      finally
        Query2.Free;
      end;
    end;
      

  2.   

             try
             if Not Database1.InTransaction then
                Database1.StartTransaction; //开始事务控制
             Query2.close;
             Query2.Sql.clear;
             Query2.SQL.Add('insert into userr (usernam,psw) values (:usname,:psww)');
             Query2.ParamByName('usname').asstring:=ComboBox1.Text;
             Query2.ParamByName('psww').asstring:=pssword;
             //psword:= Query1.FieldValues['psw'];
             //psw:= form1.UncrypKey(psw,'123456');
             //psword.Text:=psw;
              Query2.ExecSQL; //开始插入记录
                Database1.Commit; //提交事务
               except
                 begin
                   Query2.Free; //如果出错首先将Query Free掉
                     Database1.RollBack; //回退事务
                     raise; //重新引发异常,以通知用户
                   end;
               end;
               Query2.free;
      

  3.   

    try this:procedure TForm1.Button1Click(Sender: TObject);
    var
      Query:TQuery;
    begin
      Query:=TQuery.Create(nil);
      Query.DatabaseName:='Test';
      try
      database1.StartTransaction;
      try
      with Query do
      begin
      close;
      sql.Clear;
      sql.Add('insert into Logininfo (usernae,pwd) values (:username,:passwords)');
      ParamByName('username').asstring:=edit1.Text;
      ParamByName('passwords').asstring:=edit2.text;
      ExecSql;
      end;
      database1.Commit;
      except
      database1.Rollback;
      raise;
      end;
      finally
      Query.Free;
      end;
    end;
      

  4.   

    我是用Database Desktop做的userr.db数据表,放在程序的db文件夹下,程序放在ck文件夹下的aa文件夹下,ck文件夹下有二个文件夹,aa和db,db放着userr.db,aa放着程序,我的路径是
    ..\db
    不用事务,3楼的可以写入数据,用了事务就还是出上面的错误,说是数据库要用本地的数据库,怎么回事啊。
      

  5.   

    database1.TransIsolation:= tiDirtyRead ;
    错误的提示是意思就是,让本地的数据库的脏读是第二级,就是让database1.TransIsolation赋值为tiDirtyRead ;