关于数据库全选和反选功能的实现。

Description of your first forum.

关于数据库全选和反选功能的实现。

帖子lifangchao2008 » 星期一, 2007年12月10日 08:28


在窗体中有两个单选框,一个为全选,一个为反选

数据表中有一个是否返单数据列(bit类型),根据用户需求在实现全选及反选功能,当用户单击全选时则将数据库中所有记录的是否返单数据列变为已选状态。当单击反先时则将已选的记录变为反选状态。

下面的代码是我实现的全选操作。反选没有实现
procedure TDZ_SDJL_FORM.RadioButton1Click(Sender: TObject);//全选
begin
  DM.ADO_DZ_SDJL.First;
  DM.ADO_DZ_SDJL.DisableControls;
  While Not DM.ADO_DZ_SDJL.Eof do
  begin
    if not DM.ADO_DZ_SDJL.FieldByName('是否返单).AsBoolean = True then
    begin
      DM.ADO_DZ_SDJL.Edit;
      DM.ADO_DZ_SDJL.FieldByName('是否返单).AsBoolean := True;
      DM.ADO_DZ_SDJL.FieldByName('收单时间').AsString := delphi.com/topic_517185_0ed5.htm">Format DateTime('yyyy-mm-dd',Now());
    end;
    DM.ADO_DZ_SDJL.Next;
  end;
  DM.ADO_DZ_SDJL.EnableControls;
  DM.ADO_DZ_SDJL.First;
end;
 
 
 

关于数据库全选和反选功能的实现。

帖子lifangchao2008 » 星期一, 2007年12月10日 08:42


没有会的么。麻烦大家别光看啊。帮顶一下也是个意思么![:D]
 
 
 

关于数据库全选和反选功能的实现。

帖子shadowpj » 星期一, 2007年12月10日 09:18


全选:onclick里写
  with qry_public do begin
    close;
    sql.clear;
    sql.add('update 表 set 是否返单=0,收单时间=convert(datetime,getdate(),120)');
    execsql;  
end
   DM.ADO_DZ_SDJL.requery;

反选
  with qry_public do begin
    close;
    sql.clear;
    sql.add('update 表 set 是否返单=case when 是否返单=0 then 1 else 0 end');
    execsql;  
end
   DM.ADO_DZ_SDJL.requery;
 效率因该比你的好。虽然是对整表更新但是比你少了个循环和判断。我指程序里。
 
 
 

关于数据库全选和反选功能的实现。

帖子angellover » 星期一, 2007年12月10日 09:26


procedure TDZ_SDJL_FORM.RadioButton1Click(Sender: TObject);//反选
begin
  DM.ADO_DZ_SDJL.First;
  DM.ADO_DZ_SDJL.DisableControls;
  While Not DM.ADO_DZ_SDJL.Eof do
  begin
    if not DM.ADO_DZ_SDJL.FieldByName('是否返单).AsBoolean = True then
    begin
      DM.ADO_DZ_SDJL.Edit;
      DM.ADO_DZ_SDJL.FieldByName('是否返单).AsBoolean := FALSE;
      DM.ADO_DZ_SDJL.FieldByName('收单时间').AsString := Format DateTime('yyyy-mm-dd',Now());
    end else
    begin
      DM.ADO_DZ_SDJL.Edit;
      DM.ADO_DZ_SDJL.FieldByName('是否返单).AsBoolean := True;
      DM.ADO_DZ_SDJL.FieldByName('收单时间').AsString := FormatDateTime ('yyyy-mm-dd',Now());
    end;
    DM.ADO_DZ_SDJL.Next;
  end;
  DM.ADO_DZ_SDJL.EnableControls;
end;
 
 
 

关于数据库全选和反选功能的实现。

帖子newfood123 » 星期一, 2007年12月10日 12:30


个人认为这样做全选与反选没有太大的意义
 
 
 

关于数据库全选和反选功能的实现。

帖子lifangchao2008 » 星期二, 2007年12月11日 10:50


to楼上。你有什么更好的方法么?

全选简单。只是反选时要将原始状态的未选变为已选。而将原始状态的已选变为反选。

不是更新记录的概念。


如:
-------------------------------------
ID    YESNO     DT
1     是        2007-01-01
2     否        2007-01-01
3     是        2007-01-01
-------------------------------------
全选
ID    YESNO     DT
1     是        2007-01-01
2     是        2007-01-01
3     是        2007-01-01
反选则是
ID    YESNO     DT
1     否        2007-01-01
2     是        2007-01-01  
3     否        2007-01-01

总之反选就是将已返单的变为未返单,而未返单的则变为已返单!

[?]
 
 
 

关于数据库全选和反选功能的实现。

帖子shadowpj » 星期二, 2007年12月11日 11:09


昨天没注意看随手写的。今天做了测试通过
TO:newfood123 用户需求是上帝
to:lifangchao2008 分分给我。嘿嘿。
  with qry_public do begin
    close;
    sql.clear;
    sql.add('update a set 是否返单=case when 是否返单=1 then 是否返单 else 1 end ,收单时间=case when 是否返单=1 then 收单时间 else convert(datetime,getdate(),120) end');
    execsql;  
end
   DM.ADO_DZ_SDJL.requery;

反选
  with qry_public do begin
    close;
    sql.clear;
    sql.add('update a set 是否返单=case when 是否返单=0 then 1 else 0 end,
             收单时间=case when 是否返单=1 then 收单时间 else convert(datetime,getdate(),120) end');
    execsql;  
end
   DM.ADO_DZ_SDJL.requery;