看看这个就齐了....给分吧//============================================================================== //数据安全保存****************************************************************** //============================================================================== 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;
数据库不更新。为什么??
如果一切都是缺省的话post就可以了
这样数据库里面就可跟着变乐
如果在Dbgrid中用
ClientDataSet1.delete 删除客户端数据集中的某条记录
请问如何更新保存到服务器上的数据库
我用ClientDataSet1.ApplyUpdates(0);
结果每次都无法保存(每次重新搜索,结果删除的数据还在)
请问是什么原因?
我通过一个查询按钮,将查询后的机构显示在dbgrid控件中,后来发现有一个字段错误,就直接在dbgrid控件种更改了,没有通过任何按钮或任何事件。更改完之后,发现数据库中的不更新。各位老大,不知道我这样讲,大家明不明白??
adoquery1.active:=true;
两位大侠,你们有没有认真看上面的讨论呀?
我觉得如果看了的话,也许就不会写这样的答案了.请看清楚条件.
begin
adoquery1.Edit;
adoquery1.Post;
end;
还有,我的sql语句是没有问题的。
我的程序全是这样做的,没有任何问题!