Delphi中如何删除DBGrid选中记录
ifApplication.MessageBox('确定删除吗?','询问',MB_ICONQUESTION+MB_YESNO)=ID_YESthenbeginstrSe...
if Application.MessageBox('确定删除吗?', '询问', MB_ICONQUESTION + MB_YESNO) = ID_YES then begin
strSeq := DBGrid.DataSource.DataSet.FieldByName('no').AsString;
sqlstr := '';
sqlstr := sqlstr + 'delete from Table1 where no = ' + strSeq;
ExecQuery(sqlstr,'1');
end;
↑上面这段代码是我照着别人的仿写的,我想知道这个 “strSeq”取的值是不是我在 “DBGrid”中选中的那条记录的“no”?
还有,我看别人说这个可以直接写为
if Application.MessageBox('确定删除吗?', '询问', MB_ICONQUESTION + MB_YESNO) = ID_YES then begin
dbgrid1.DataSource.DataSet.Delete;
end;
↑这样写的话,没有定义哪一条是选中的也没问题吗? 展开
strSeq := DBGrid.DataSource.DataSet.FieldByName('no').AsString;
sqlstr := '';
sqlstr := sqlstr + 'delete from Table1 where no = ' + strSeq;
ExecQuery(sqlstr,'1');
end;
↑上面这段代码是我照着别人的仿写的,我想知道这个 “strSeq”取的值是不是我在 “DBGrid”中选中的那条记录的“no”?
还有,我看别人说这个可以直接写为
if Application.MessageBox('确定删除吗?', '询问', MB_ICONQUESTION + MB_YESNO) = ID_YES then begin
dbgrid1.DataSource.DataSet.Delete;
end;
↑这样写的话,没有定义哪一条是选中的也没问题吗? 展开
1个回答
展开全部
1、是。DBGrid.DataSource.DataSet.FieldByName('no').AsString返回的是当前行的no字段中的值。
2、没问题。这个delete方法是删除数据集的当前这一行数据,数据集打开后会默认选择第一行。
当前行,也就是dbgrid中小三角指的那一行
2、没问题。这个delete方法是删除数据集的当前这一行数据,数据集打开后会默认选择第一行。
当前行,也就是dbgrid中小三角指的那一行
追问
那如果第二种写法要删除的是当前行,需要添加什么?
追答
什么也不需要添加。如果要删除第二行,就点击第二行(点击了第二行,第二行就成了当前行),然后再删除。
如果你有一个按钮叫“删除第二条数据”,点击事件可以这样写:
DBGrid.DataSource.DataSet.First; //转到第一条
DBGrid.DataSource.DataSet.Next;//转到下一条,即第二条
DBGrid.DataSource.DataSet.Delete;//删除第二条
如果你有一个按钮叫“删除最后一条“,可以这样:
DBGrid.DataSource.DataSet.Last;//转到最后一条
DBGrid.DataSource.DataSet.Delete;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询