如何过滤表的空字段(100分)

  • 主题发起人 主题发起人 hxf
  • 开始时间 开始时间
H

hxf

Unregistered / Unconfirmed
GUEST, unregistred user!
有一张表,内含有一TDateTime类型的字段,该字段的一些记录为空,现要将这些为空的记录
过虑出来,问应如何处理。
 
fieldname=''

or

fieldname<>''

有什么问题吗?
 
null和""不是一回事
fieldname=null
 
Field[字段名]=Null or Field[字段名]=''
 
可以用TField的IsNull判断。
但关键是你是要把这些记录取出来还是过滤掉?是在DBGrid里显示用吗?
 
是要把这些记录取出来并且在DBGrid里显示
 
fieldname is null
 
在TTable或TQuery的OnFilterRecord事件里进行过滤:
procedure TForm1.Query1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
Accept := DataSet.FieldByName('dt').IsNull;
end;
然后在合适的地方调用Query1.Filtered := True;
 
还可以用fieldbyname('').asdatetime=0判断,若为空值,强制类型转换时为0,这样比
较安全
 
第一:
如果在Select语句中完成则是:
select ... from ... where 字段 is null ...;//这是显示空的记录,如果不显示,
则是 ...where 字段 Is not Null ... ;

第二:
如果是在Query中过滤,则是:Tquery.Filter:='字段 = Null'; //显示空记录
不显示是:Tquery.Filter:='字段 <> Null';
然后设置Tquery.Filtered:=true;
注意:写Filter的时候操作符号(=<>+-*/)要与字段名称以及数值用空格隔开!
 
非常感谢大家提出的解决方法,由于分数不多,只能选我认为最好的解决方法。
 
可以用
FieldByName('字段名').Asstring='' or
Fields('字段名') is Null
判断,虽然你的字段类型为datetime,但是asstring也能用,我用过
 
如果用的是 TTable , 在TTable的
Filter属性设置 xxx is not null (xxx就是列名)
Filtered 设置为 true

如果是 TQuery ,那么在sql命令中加
where xxx is not null

 
多人接受答案了。
 
后退
顶部