关于数据库全选和反选功能的实现。 ( 积分: 30 )

  • 主题发起人 主题发起人 lifangchao2008
  • 开始时间 开始时间
L

lifangchao2008

Unregistered / Unconfirmed
GUEST, unregistred user!
在窗体中有两个单选框,一个为全选,一个为反选<br><br>数据表中有一个是否返单数据列(bit类型),根据用户需求在实现全选及反选功能,当用户单击全选时则将数据库中所有记录的是否返单数据列变为已选状态。当单击反先时则将已选的记录变为反选状态。<br><br>下面的代码是我实现的全选操作。反选没有实现<br>procedure&nbsp;TDZ_SDJL_FORM.RadioButton1Click(Sender:&nbsp;TObject);//全选<br>begin<br>&nbsp;&nbsp;DM.ADO_DZ_SDJL.First;<br>&nbsp;&nbsp;DM.ADO_DZ_SDJL.DisableControls;<br>&nbsp;&nbsp;While&nbsp;Not&nbsp;DM.ADO_DZ_SDJL.Eof&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;DM.ADO_DZ_SDJL.FieldByName('是否返单).AsBoolean&nbsp;=&nbsp;True&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DM.ADO_DZ_SDJL.Edit;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DM.ADO_DZ_SDJL.FieldByName('是否返单).AsBoolean&nbsp;:=&nbsp;True;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DM.ADO_DZ_SDJL.FieldByName('收单时间').AsString&nbsp;:=&nbsp;FormatDateTime('yyyy-mm-dd',Now());<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;DM.ADO_DZ_SDJL.Next;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;DM.ADO_DZ_SDJL.EnableControls;<br>&nbsp;&nbsp;DM.ADO_DZ_SDJL.First;<br>end;
 
没有会的么。麻烦大家别光看啊。帮顶一下也是个意思么![:D]
 
全选:onclick里写<br>&nbsp;&nbsp;with&nbsp;qry_public&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;close;<br>&nbsp;&nbsp;&nbsp;&nbsp;sql.clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;sql.add('update&nbsp;表&nbsp;set&nbsp;是否返单=0,收单时间=convert(datetime,getdate(),120)');<br>&nbsp;&nbsp;&nbsp;&nbsp;execsql;&nbsp;&nbsp;&nbsp;<br>end<br>&nbsp;&nbsp;&nbsp;DM.ADO_DZ_SDJL.requery;<br><br>反选<br>&nbsp;&nbsp;with&nbsp;qry_public&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;close;<br>&nbsp;&nbsp;&nbsp;&nbsp;sql.clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;sql.add('update&nbsp;表&nbsp;set&nbsp;是否返单=case&nbsp;when&nbsp;是否返单=0&nbsp;then&nbsp;1&nbsp;else&nbsp;0&nbsp;end');<br>&nbsp;&nbsp;&nbsp;&nbsp;execsql;&nbsp;&nbsp;&nbsp;<br>end<br>&nbsp;&nbsp;&nbsp;DM.ADO_DZ_SDJL.requery;<br>&nbsp;效率因该比你的好。虽然是对整表更新但是比你少了个循环和判断。我指程序里。
 
procedure&nbsp;TDZ_SDJL_FORM.RadioButton1Click(Sender:&nbsp;TObject);//反选<br>begin<br>&nbsp;&nbsp;DM.ADO_DZ_SDJL.First;<br>&nbsp;&nbsp;DM.ADO_DZ_SDJL.DisableControls;<br>&nbsp;&nbsp;While&nbsp;Not&nbsp;DM.ADO_DZ_SDJL.Eof&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;DM.ADO_DZ_SDJL.FieldByName('是否返单).AsBoolean&nbsp;=&nbsp;True&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DM.ADO_DZ_SDJL.Edit;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DM.ADO_DZ_SDJL.FieldByName('是否返单).AsBoolean&nbsp;:=&nbsp;FALSE;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DM.ADO_DZ_SDJL.FieldByName('收单时间').AsString&nbsp;:=&nbsp;FormatDateTime('yyyy-mm-dd',Now());<br>&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DM.ADO_DZ_SDJL.Edit;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DM.ADO_DZ_SDJL.FieldByName('是否返单).AsBoolean&nbsp;:=&nbsp;True;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DM.ADO_DZ_SDJL.FieldByName('收单时间').AsString&nbsp;:=&nbsp;FormatDateTime('yyyy-mm-dd',Now());<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;DM.ADO_DZ_SDJL.Next;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;DM.ADO_DZ_SDJL.EnableControls;<br>end;
 
个人认为这样做全选与反选没有太大的意义
 
to楼上。你有什么更好的方法么?<br><br>全选简单。只是反选时要将原始状态的未选变为已选。而将原始状态的已选变为反选。<br><br>不是更新记录的概念。<br><br><br>如:<br>-------------------------------------<br>ID&nbsp;&nbsp;&nbsp;&nbsp;YESNO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DT<br>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-01-01<br>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-01-01<br>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-01-01<br>-------------------------------------<br>全选<br>ID&nbsp;&nbsp;&nbsp;&nbsp;YESNO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DT<br>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-01-01<br>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-01-01<br>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-01-01<br>反选则是<br>ID&nbsp;&nbsp;&nbsp;&nbsp;YESNO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DT<br>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-01-01<br>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-01-01&nbsp;&nbsp;<br>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-01-01<br><br>总之反选就是将已返单的变为未返单,而未返单的则变为已返单!<br><br>[?]
 
昨天没注意看随手写的。今天做了测试通过<br>TO:newfood123&nbsp;用户需求是上帝<br>to:lifangchao2008&nbsp;分分给我。嘿嘿。<br>&nbsp;&nbsp;with&nbsp;qry_public&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;close;<br>&nbsp;&nbsp;&nbsp;&nbsp;sql.clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;sql.add('update&nbsp;a&nbsp;set&nbsp;是否返单=case&nbsp;when&nbsp;是否返单=1&nbsp;then&nbsp;是否返单&nbsp;else&nbsp;1&nbsp;end&nbsp;,收单时间=case&nbsp;when&nbsp;是否返单=1&nbsp;then&nbsp;收单时间&nbsp;else&nbsp;convert(datetime,getdate(),120)&nbsp;end');<br>&nbsp;&nbsp;&nbsp;&nbsp;execsql;&nbsp;&nbsp;&nbsp;<br>end<br>&nbsp;&nbsp;&nbsp;DM.ADO_DZ_SDJL.requery;<br><br>反选<br>&nbsp;&nbsp;with&nbsp;qry_public&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;close;<br>&nbsp;&nbsp;&nbsp;&nbsp;sql.clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;sql.add('update&nbsp;a&nbsp;set&nbsp;是否返单=case&nbsp;when&nbsp;是否返单=0&nbsp;then&nbsp;1&nbsp;else&nbsp;0&nbsp;end,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;收单时间=case&nbsp;when&nbsp;是否返单=1&nbsp;then&nbsp;收单时间&nbsp;else&nbsp;convert(datetime,getdate(),120)&nbsp;end');<br>&nbsp;&nbsp;&nbsp;&nbsp;execsql;&nbsp;&nbsp;&nbsp;<br>end<br>&nbsp;&nbsp;&nbsp;DM.ADO_DZ_SDJL.requery;
 
后退
顶部