//備忘:mysql必須是使用innoDB引擎才支援事務功能,否則以下事務相關代碼將失效。
//SQL SERVER和Oracle還沒試,明天回公司試了再發代碼。
procedure TForm1.btn1Click(Sender: TObject);
var
i, j: Integer;
begin
UniConnection1.Connect;
try
try
UniTransaction1.Connections[0].StartTransaction;
UniQuery1.Params.Clear;
UniQuery1.SQL.Text := 'insert into user (username,password)values(:username, :password)';
UniQuery1.Params.ParamByName('username').Value := 'eboy';
UniQuery1.Params.ParamByName('password').Value := '1111';
UniQuery1.ExecSQL; //如果不使用事務,這條將插入進去
UniQuery1.Params.Clear;
UniQuery1.SQL.Text := 'insert into user (username,password)values(:username, :password)';
UniQuery1.Params.ParamByName('username').Value := 'frr';
UniQuery1.Params.ParamByName('password').Value := '123';
UniQuery1.ExecSQL; //如果不使用事務,這條將插入進去
UniQuery1.Params.Clear;
UniQuery1.SQL.Text := 'insert into user (username,password)values(:username, :password)';
UniQuery1.Params.ParamByName('username').Value := 'lj';
UniQuery1.Params.ParamByName('password').Value := '880414';
UniQuery1.ExecSQL; //如果不使用事務,這條將插入進去
UniQuery1.Params.Clear;
UniQuery1.SQL.Text := 'insert into user (username,password)values(:username, :password)';
UniQuery1.Params.ParamByName('username').Value := 'lj';
UniQuery1.Params.ParamByName('password').IsNull; //欄位設為not null,所以這裡會出錯
UniQuery1.ExecSQL; //開啟事務後,上面的三條都將復原
UniTransaction1.Connections[0].Commit;
except on e: Exception do
begin
UniTransaction1.Connections[0].Rollback;
ShowMessage(e.Message);
end;
end;
finally
UniConnection1.Disconnect;
end;
end;