共享一个函数
//==============================================================================
//数据安全保存******************************************************************
//==============================================================================
function Data_SafeSave(DataSet: TDataSet; WinControl: TWinControl): Boolean;
begin
Result := false;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//TDBDataSet是TQuery,TTable,TStoredProc的直接父类(两层结构)*******************
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (DataSet is TDBDataSet) then
begin
if (DataSet as TDBDataSet).Database.InTransaction then (DataSet as TDBDataSet).Database.Rollback;
(DataSet as TDBDataSet).Database.StartTransaction;//开始提交一个事务
try
(DataSet as TDBDataSet).ApplyUpdates;//把缓存中未决的记录写到数据集中
(DataSet as TDBDataSet).Database.Commit;//把调用StartTransaction以来所有的数据变化都反映到服务器上,与Query_Main.Database.Rollback相反
Result := true;
except
(DataSet as TDBDataSet).CancelUpdates;
(DataSet as TDBDataSet).Database.Rollback;//把调用StartTransaction以来所有的数据变化都取消,与Query_Main.Database.Commit相反
if WinControl<>nil then WinControl.SetFocus;
Result := false;
Abort;
end;
(DataSet as TDBDataSet).CommitUpdates;
end
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//TClientDataSet远程更新(三层结构)********************************************
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
else if (DataSet is TClientDataSet) then
begin
if (DataSet as TClientDataSet).ApplyUpdates(0)=0 then
begin
Result := true;
end else
begin
if WinControl<>nil then WinControl.SetFocus;
Result := false;
Abort;
end;
end;
end;
//==============================================================================
//数据安全保存******************************************************************
//==============================================================================
function Data_SafeSave(DataSet: TDataSet; WinControl: TWinControl): Boolean;
begin
Result := false;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//TDBDataSet是TQuery,TTable,TStoredProc的直接父类(两层结构)*******************
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (DataSet is TDBDataSet) then
begin
if (DataSet as TDBDataSet).Database.InTransaction then (DataSet as TDBDataSet).Database.Rollback;
(DataSet as TDBDataSet).Database.StartTransaction;//开始提交一个事务
try
(DataSet as TDBDataSet).ApplyUpdates;//把缓存中未决的记录写到数据集中
(DataSet as TDBDataSet).Database.Commit;//把调用StartTransaction以来所有的数据变化都反映到服务器上,与Query_Main.Database.Rollback相反
Result := true;
except
(DataSet as TDBDataSet).CancelUpdates;
(DataSet as TDBDataSet).Database.Rollback;//把调用StartTransaction以来所有的数据变化都取消,与Query_Main.Database.Commit相反
if WinControl<>nil then WinControl.SetFocus;
Result := false;
Abort;
end;
(DataSet as TDBDataSet).CommitUpdates;
end
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//TClientDataSet远程更新(三层结构)********************************************
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
else if (DataSet is TClientDataSet) then
begin
if (DataSet as TClientDataSet).ApplyUpdates(0)=0 then
begin
Result := true;
end else
begin
if WinControl<>nil then WinControl.SetFocus;
Result := false;
Abort;
end;
end;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货