使用execSQL或COMMIT来结束事务

时间:2015-07-08 02:10:37

标签: sql delphi

结束交易的正确方法是什么? :

Query.SQL.Add('START TRANSACTION;');
-----
-----
Query.SQL.Add('COMMIT;');
Query.ExecSQL;

Query.SQL.Add('START TRANSACTION;');
-----
-----
Query.ExecSQL; 
Query.SQL.Add('COMMIT;');

编辑: 或者这样:

.......
.......
try
if not Database1.InTransaction then
Database1.StartTransaction;
Query.ExecSQL;
Database1.Commit;
except  on E : Exception do begin
Database1.Rollback;

1 个答案:

答案 0 :(得分:7)

通常你必须在try下控制事务,除了防止插入或更新语句出错..所以我建议 在tConnection上使用start transaction而不是在try除外的tquery上使用

mEdit = (Button)findViewById(R.id.Prof_edit_btn);
mEdit.setOnClickListener(new View.OnClickListener() {               
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub                  
                    mBatal.setVisibility(View.VISIBLE);
                    mBatal.setClickable(true);
                    mSave.setVisibility(View.VISIBLE);
                    mSave.setClickable(true);
                    mEdit.setVisibility(View.INVISIBLE);                    
            }
        });

mSave = (Button)findViewById(R.id.Prof_save_btn);
mSave.setOnClickListener(new View.OnClickListener() {               
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                mEdit.setVisibility(View.VISIBLE);  
                mBatal.setVisibility(View.INVISIBLE);
                mSave.setVisibility(View.INVISIBLE);
                Toast.makeText(getApplicationContext(), "Data Anda berhasil disimpan", Toast.LENGTH_SHORT).show();                  
            }
        });

注意: 将RollbackTrans放在异常管理的第一行非常重要,因为showmessage或其他任何其他代码都可以为其他用户锁定数据库表的一部分