针对Clientdateset操作。。 var s,s1: string;s1 := "XX,XX可以删除,xx,xx不可以删除,是否确认执行删除操作?" ClientDataSet1.First; for i = 0 to ClientDataSet1.RecordCount-1 do begin if ClientDataSet1.FieldValues['a'] then s := '当前字段为True' else s := '当前字段为False'; if MessageBox(handle,pchar(s1), pchar(s), MB_OKCANCEL) = MB_OK then ClientDataSet1.Delete else ClientDataSet1.Next; end;
你按鍵盤上的Delete鍵試試(optionsdata-deleting-true)procedure TRES_SOP_F.btnSB_DelClick(Sender: TObject); var sop_id:Integer; begin inherited; if not qry_main.IsEmpty then begin if MessageDlg('你確定要刪除你所選擇的記錄嗎?',mtWarning,[mbYes,mbNo],0)=idyes then begin img1.Picture:=nil; sop_id:=qry_main.fieldbyname('sop_id').AsInteger; qry_main.Delete; qry_op.Close; qry_op.SQL.Text:='delete from sop_pn where sop_id='''+inttostr(sop_id)+''''; qry_op.ExecSQL; qry_op.Close; qry_op.SQL.Text:='delete from SOP_IMG where sop_id='''+inttostr(sop_id)+''''; qry_op.ExecSQL; end; end; end;
with cxGrid1DBTableView1.DataController.DataSource.DataSet do begin for i:= 0 to cxGrid1DBTableView1.ViewData.RowCount-1 do begin if cxGrid1DBTableView1.ViewData.Rows[i].Selected then begin GotoBook(Pointer(cxGrid1DBTableView1.ViewData.Rows[i])); if FieldByName('ccode').AsBoolean then usehook := usehook + fieldbyname('ccode').AsString+',' else delhook := delhook + fieldbyname('ccode').AsString+','; end; end; end; 给位,看一下,我的代码是这样的,我的意思是将可以删除的存在delhook中,不能删除的放在usehook中,可是在循环的时候执行到gotobook的时候提示i越界,怎么回事啊,能不能给个提示?
with cxGridTaxTkTv.DataController do begin for j := 0 to RowCount - 1 do begin for i := 0 to RowCount - 1 do begin if Values[i,cxGridTaxTkTvColumnSelected.Index] then begin //此项判断是否选中它可以设置为CheckBox类型让用户选择 DeleteRecord(i); Break; end; end; end; end;
加一個checkbox類型的字段(復選框)這樣更好
procedure TForm1.Button1Click(Sender: TObject); var i : integer; sID : string; adotmp : TADOQuery; begin //Values[0] 为字段a //Values[1] 为标识字段 //cxgrdItemList 为cxGrid sID := '0'; for i := 0 to cxgrdItemList.DataController.Controller.SelectedRecordCount - 1 do begin if cxgrdItemList.DataController.Controller.SelectedRecords[i].Values[0] = True then continue; sID := sID + ', ' + cxgrdItemList.DataController.Controller.SelectedRecords[i].Values[1]; end; adotmp := TADOQuery.Create(nil); with adotmp do try {自己写 Connection := ; } sql.Text := 'delete from yTbName where ID in (' + sID + ')'; ExecSQL; finally free; //刷新一下cxgrid的dataset; end;end;
var
s,s1: string;s1 := "XX,XX可以删除,xx,xx不可以删除,是否确认执行删除操作?"
ClientDataSet1.First;
for i = 0 to ClientDataSet1.RecordCount-1 do
begin
if ClientDataSet1.FieldValues['a'] then
s := '当前字段为True'
else
s := '当前字段为False';
if MessageBox(handle,pchar(s1), pchar(s), MB_OKCANCEL) = MB_OK then
ClientDataSet1.Delete
else
ClientDataSet1.Next;
end;
var
sop_id:Integer;
begin
inherited;
if not qry_main.IsEmpty then
begin
if MessageDlg('你確定要刪除你所選擇的記錄嗎?',mtWarning,[mbYes,mbNo],0)=idyes then
begin
img1.Picture:=nil;
sop_id:=qry_main.fieldbyname('sop_id').AsInteger;
qry_main.Delete;
qry_op.Close;
qry_op.SQL.Text:='delete from sop_pn where sop_id='''+inttostr(sop_id)+'''';
qry_op.ExecSQL;
qry_op.Close;
qry_op.SQL.Text:='delete from SOP_IMG where sop_id='''+inttostr(sop_id)+'''';
qry_op.ExecSQL;
end;
end;
end;
多行删除
1,通过在sql语句中加入convert(char(1),'N') as XZ 在query中把XZ加入进来,在grid中把加入进来,
在grid中把除了XZ其他字段改为只读,加入update控件指定数据源但是不写更新语句,当你双吉起用qry.edit; XZ:='Y' qry.post;
2,其他方法通过grid中自带的mutliSelect属性
删除时判断
1,采用GRID书签 MySelected: TBookList;MySelected := grdRightCK.SelectedRows;qryCK.Book := MySelected[iloop];来定位你选择记录然后qryCK.FieldByName('')来取然后判断判断可以用MessageBox(0,PCHAR('内容'),PCHAR('标题'),MB_YESNO)有返回值;返回值IDYES = 6;IDNO = 7;来判断用户选择了yes还是no.
2,边历qry判断是否选择了XZ ='Y',如果是则操作.
楼主多写写,不要因为把别人的代码拷过来能用了就开心,原理懂了更开心.
begin
for i:= 0 to cxGrid1DBTableView1.ViewData.RowCount-1 do
begin
if cxGrid1DBTableView1.ViewData.Rows[i].Selected then
begin
GotoBook(Pointer(cxGrid1DBTableView1.ViewData.Rows[i]));
if FieldByName('ccode').AsBoolean then
usehook := usehook + fieldbyname('ccode').AsString+','
else
delhook := delhook + fieldbyname('ccode').AsString+',';
end;
end;
end;
给位,看一下,我的代码是这样的,我的意思是将可以删除的存在delhook中,不能删除的放在usehook中,可是在循环的时候执行到gotobook的时候提示i越界,怎么回事啊,能不能给个提示?
for j := 0 to RowCount - 1 do begin for i := 0 to RowCount - 1 do begin
if Values[i,cxGridTaxTkTvColumnSelected.Index] then begin //此项判断是否选中它可以设置为CheckBox类型让用户选择
DeleteRecord(i);
Break;
end;
end; end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
sID : string;
adotmp : TADOQuery;
begin
//Values[0] 为字段a
//Values[1] 为标识字段
//cxgrdItemList 为cxGrid
sID := '0';
for i := 0 to cxgrdItemList.DataController.Controller.SelectedRecordCount - 1 do
begin
if cxgrdItemList.DataController.Controller.SelectedRecords[i].Values[0] = True then
continue;
sID := sID + ', ' + cxgrdItemList.DataController.Controller.SelectedRecords[i].Values[1];
end;
adotmp := TADOQuery.Create(nil);
with adotmp do
try
{自己写
Connection := ;
}
sql.Text := 'delete from yTbName where ID in (' + sID + ')';
ExecSQL; finally
free;
//刷新一下cxgrid的dataset;
end;end;