clientdataset使用locate或filter定位到字段为空值的记录

kwong kwong     2023-02-26     452

关键词:

场景,程序想检查是否存在某个字段的值是空的,如果存在,则不允许增加记录,否则允许增加记录。

解决这个问题,我一开始用了两种错误的方法

 if not clientdataset.locate(‘AFieldName‘,‘‘,[]) then  //如果存在字段AFieldName的值为空的记录,则不允许增加一行记录append
  clientdataset.append
else
  exit;

  第二种错误方法

ClientDataset.Filtered := false;
ClientDataset.Filter := ‘AFieldName=‘‘‘‘‘;
ClientDataset.Filtered := true;
if ClientDataset.Recordcount>0 then
  exit
else
  ClientDataset.append;

  第三种,遍历记录,记录太多了,不适用。

前两种方法,如果字段值为‘’(emptystr),那就没问题,但问题是,字段值为null,那么就定位不到或过滤不到这种记录了。

于是百度了一下,发现使用较多的方法是

clientdataset.locate(‘AFieldName‘,null,[])

  当时觉得不可行,因为Delphi里的空是用nil表示的,不存在null关键字。

后来鬼使神差的,居然还是试了一下,居然编译通过了!!!而且,居然能成功定位到了字段值为null的记录。真是狠狠地给我上了一堂课。

后面查看代码,原来这个null是Variants单元里的一个方法,所以要使用还得先引用这个单元。

unit Variants;

function Null: Variant;
begin
  _VarNull(TVarData(Result));
end;

原来是这么一回事。然后再看看ClientDataset的locate函数,发现里面有个判断

if VarIsNull(Value) then
    Expr := Expr + Format(‘[%s] IS NULL‘,[TField(Fields[i]).FieldName])   Do not localize 
 else
    Expr := Expr + Format(‘[%s]=%s‘,[TField(Fields[i]).FieldName, ValStr]);

这一句是拼凑Filter表达式的判断语句,也由此可知,想使用Filter过滤空值(null)的记录就需要这样写 

Filter := ‘AFieldName is null‘;

  

 

  

    

clientdataset建立索引和排序

可用ClientDataSet.AddIndex或ClientDataSet1.IndexDefs.AddIndexDef建立索引。AddIndex(constName:string;         //索引名constFields:string;      查看详情

clientdataset中动态添加计算字段并用计算字段显示记录的updatestatus

ClientDataSet中每条记录都有UpdateStatus=(usUnmodified,usModified,usInserted,usDeleted)记录该条数据是修改的,删除的,还是新增的等。有时候我们只想看修改的或新增的或删除的就可能用到这一属性。下图用计算字段显示UpdateStatus状态。******... 查看详情

clientdataset<---->json

现在,DATASNAP倾向于使用JSON作为统一的数据序列格式,以期达到跨平台的效果。于是使用JSON便成为热点。unituJSONDB; interfaceusesSysUtils,Classes,Variants,DB,DBClient,SuperObject,Dialogs;typeTJSONDB=class privateclassfunctiongetJsonFiel 查看详情

通过clientdataset复制表的结构及数据

1、  需要2个ClientDataSet组件;2、  clientDataSet1连接目标表,clientDataSet2连接源表,如果无法直接连接,使用DataSetProvider进行桥接;3、  复制clientDataSet2结构到clientDataSet1; forI:=0toclientDataSet2.FieldDefs.Count-1do&... 查看详情

在 iOS 的 Swift 中使用“locations array”或“manager.location.coordinate”哪一个来获取用户位置?

】在iOS的Swift中使用“locationsarray”或“manager.location.coordinate”哪一个来获取用户位置?【英文标题】:Whichonetouse"locationsarray"or"manager.location.coordinate"inSwiftiniOStogetuserlocation?【发布时间】:2016-10-2005:06:25【问题描述... 查看详情

在 AngularJS 中使用 $window 或 $location 重定向

】在AngularJS中使用$window或$location重定向【英文标题】:Using$windowor$locationtoRedirectinAngularJS【发布时间】:2014-09-0718:26:34【问题描述】:我正在开发的应用程序包含各种状态(使用ui-router),其中一些状态需要您登录,其他状态是... 查看详情

如何在 jquery 或 javascript 中使用 window.location.replace

】如何在jquery或javascript中使用window.location.replace【英文标题】:Howtousewindow.location.replaceinjqueryorjavascript【发布时间】:2017-06-0310:44:23【问题描述】:我有一个网站,我已经为其实现了实时聊天,当用户点击实时聊天链接时,它会... 查看详情

Qt Mobility 或 Qt Location 可用于桌面使用?

】QtMobility或QtLocation可用于桌面使用?【英文标题】:QtMobilityorQtLocationavailablefordesktopuse?【发布时间】:2013-08-2801:23:04【问题描述】:我一直在尝试在Qt中将mapviewer应用程序实现为桌面应用程序以使用多点触控。当我提到QtMobility... 查看详情

使用 `window.location.hash.includes` 在 IE11 中抛出“对象不支持属性或方法 'includes'”

】使用`window.location.hash.includes`在IE11中抛出“对象不支持属性或方法\\\'includes\\\'”【英文标题】:Using`window.location.hash.includes`throws“Objectdoesn\'tsupportpropertyormethod\'includes\'”inIE11使用`window.location.hash.includes`在IE11中抛出“对象 查看详情

centos使用locate

centos第一次使用locate时报错:   locate:cannotstat()`/var/lib/mlocate/mlocate.db‘:没有那个文件或目录 因为locate相关的索引库没有初始化:使用命令updatedb后即可使用locate.  查看详情

PHP 附加到 ClientDataSet CDS 文件

】PHP附加到ClientDataSetCDS文件【英文标题】:PHPappendtoClientDataSetCDSFile【发布时间】:2012-06-0506:09:39【问题描述】:我有一个空的DelphiClientDataSetCDS文件设置,其中包含我需要的所有列/标题/数据类型。我想使用PHP将关联数组附加到C... 查看详情

使用fdmemtable来代替clientdataset,解决mysql5.6(含)以上版本用cds多次更新时的错误

//读取mysql保存到fdMemTable中procedureTForm3.btnOpen1Click(Sender:TObject);varstream,stream2:TMemoryStream;buf:TBytes;beginstream:=TMemoryStream.Create;trytryFDQuery1.Close;FDQuery1.SQL.Clear;FDQuery1.Open( 查看详情

clientdataset训练之1

在做平面文件数据集时(ClientDataSet),需要引用单元, usesMidaslib  //D7,ClientDataSet选择文件(添加数据集) //但D10.3.2不可,ClientDataSet.Active选择为True也不可,引用单元:usesMidaslib只会让程序能运行,并且可以显示数... 查看详情

clientdataset应用(代码片段)

最近维护一个项目,里面用到ClientDataSet,由于之前接触ClientDataSet比较少,所以这个星期补了一下关于ClientDataSet的知识,并在此记录下我所了解到的并应用到实际项目中的ClientDataSet的知识。项目新需求:1.从别的数据库导入物料... 查看详情

document.location和window.location有啥区别

...系统(DNS)主机名或IP地址。port:端口号整数,可选,省略时使用方案的默认端口,如http的默认端口为80。path:路径由零或多个"/"符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。query:查询可选,用于给动态网... 查看详情

window

window.location 对象在编写时可不使用window这个前缀。location.hostname返回web主机的域名location.pathname返回当前页面的路径和文件名location.port返回web主机的端口(80或443)location.protocol返回所使用的web协议(http://或https://) window... 查看详情

我可以在 iOS 中使用 Map 或 Locate SDK 获取 POI

】我可以在iOS中使用Map或LocateSDK获取POI【英文标题】:CanIgetPOIsusingMaporLocateSDKiniOS【发布时间】:2013-01-0717:49:27【问题描述】:POI:兴趣点(http://en.wikipedia.org/wiki/Point_of_interest)是否有iOSapi可用于获取用户位置附近的POI列表?这就... 查看详情

Location.getProvider 总是返回“融合”而不是 GPS 或网络

...etwork【发布时间】:2015-03-2319:32:18【问题描述】:我正在使用融合位置API:locationrequest=LocationRequest.create();locationrequest.setInterv 查看详情