标准函数: //============================================================================== //数据安全删除****************************************************************** //============================================================================== function Data_SafeDelete(DataSet: TDataSet; DBGrid: TDBGrid): Boolean; var i: integer;//TDBDataSet是TQuery,TTable,TStoredProc的直接父类 begin Result := false; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //TDBDataSet是TQuery,TTable,TStoredProc的直接父类(两层结构)******************* //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (DataSet is TDBDataSet) then begin if DBGrid<>nil//如果是从DBGRid中执行删除 then try for i:=1 to DBGrid.SelectedRows.Count do begin//多行选择 (DataSet as TDBDataSet).GotoBook(Pointer(DBGrid.SelectedRows.Items[i-1])); (DataSet as TDBDataSet).Delete; end; except Abort; end else (DataSet as TDBDataSet).Delete; //========================================================================== //提交到数据库服务器******************************************************** //========================================================================== 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相反 Result := false; end; (DataSet as TDBDataSet).CommitUpdates; end //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //TClientDataSet远程更新(三层结构)******************************************** //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ else if (DataSet is TClientDataSet) then begin if DBGrid<>nil//如果是从DBGRid中执行删除 then try for i:=1 to DBGrid.SelectedRows.Count do begin//多行选择 (DataSet as TClientDataSet).GotoBook(Pointer(DBGrid.SelectedRows.Items[i-1])); (DataSet as TClientDataSet).Delete; end; except Abort; end else (DataSet as TClientDataSet).Delete; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (DataSet as TClientDataSet).ApplyUpdates(0)=0 then begin Result := true; end else begin Result := false; Abort; end; end; end;
selectrow来选中或者去掉选中
isselect来判断是否选中
而且还有一个MULTISELECT啊
在放一个STRINGGRID
当DBGRID选择上一行后
输入到STRINGGRID一行
当选择取消时候
在STRINGGRID中删除那行
然后在DELETE时候
删除全部STRINGGRID中的数据就OK了
TSelectedRows还有许多属性可以用。
你可以使用他来完成任务。前提设:DBGrid.Options.dbRowSelect := TRUE;
DBGrid.Options.dbMultiSelect:=TRUE;
//==============================================================================
//数据安全删除******************************************************************
//==============================================================================
function Data_SafeDelete(DataSet: TDataSet; DBGrid: TDBGrid): Boolean;
var i: integer;//TDBDataSet是TQuery,TTable,TStoredProc的直接父类
begin
Result := false;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//TDBDataSet是TQuery,TTable,TStoredProc的直接父类(两层结构)*******************
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (DataSet is TDBDataSet) then
begin
if DBGrid<>nil//如果是从DBGRid中执行删除
then try
for i:=1 to DBGrid.SelectedRows.Count do
begin//多行选择
(DataSet as TDBDataSet).GotoBook(Pointer(DBGrid.SelectedRows.Items[i-1]));
(DataSet as TDBDataSet).Delete;
end;
except
Abort;
end
else (DataSet as TDBDataSet).Delete;
//==========================================================================
//提交到数据库服务器********************************************************
//==========================================================================
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相反
Result := false;
end;
(DataSet as TDBDataSet).CommitUpdates;
end
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//TClientDataSet远程更新(三层结构)********************************************
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
else if (DataSet is TClientDataSet) then
begin
if DBGrid<>nil//如果是从DBGRid中执行删除
then try
for i:=1 to DBGrid.SelectedRows.Count do
begin//多行选择
(DataSet as TClientDataSet).GotoBook(Pointer(DBGrid.SelectedRows.Items[i-1]));
(DataSet as TClientDataSet).Delete;
end;
except
Abort;
end
else (DataSet as TClientDataSet).Delete;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (DataSet as TClientDataSet).ApplyUpdates(0)=0 then
begin
Result := true;
end else
begin
Result := false;
Abort;
end;
end;
end;