文档章节

TClientDataSet[27]: 字段值的约束(或叫输入限制)

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 486
阅读 2
收藏 0

Required、Precision、MaxValue、MinValue:
begin
  { Required: 必填字段 }
  with TIntegerField.Create(Self) do begin
    FieldName := 'ID';
    Required := True;
    DataSet := ClientDataSet1;
  end;

  { Precision: 浮点数精度}
  with TFloatField.Create(Self) do begin
    FieldName := 'Float';
    Precision := 3; { 譬如: 输入 1.2345 只会保留 1.23 }
    DataSet := ClientDataSet1;
  end;

  { MaxValue、MinValue }
  with TIntegerField.Create(Self) do begin
    FieldName := 'Integer';
    MinValue := 1;
    MaxValue := 99;
    DataSet := ClientDataSet1;
  end;

  ClientDataSet1.CreateDataSet;
end;

 
 
 
 
 

 

 

  

可在字段的 CustomConstraint 属性中按 SQL 语法指定约束规则;
并用字段的 ConstraintErrorMessage 属性指定违反规则后的错误提示.
procedure TForm1.FormCreate(Sender: TObject);
begin
  with TIntegerField.Create(Self) do begin
    FieldName := 'ID';
    CustomConstraint := 'x>0 and x<100'; { 其中的 x 是随意的, 表示当前字段值 }
    ConstraintErrorMessage := 'Err1';
    DataSet := ClientDataSet1;
  end;

  with TStringField.Create(Self) do begin
    FieldName := 'Name';
    Size := 11;
    CustomConstraint := 'x Like ''张%'''; { 假如只要姓张的 }
    ConstraintErrorMessage := 'Err2';
    DataSet := ClientDataSet1;
  end;

  with TStringField.Create(Self) do begin
    FieldName := 'Sex';
    Size := 2; { 如果使用 TWideStringField 这里应该是 1 }
    CustomConstraint := 'x in(''男'', ''女'')'; { 只能输入: 男或女 }
    ConstraintErrorMessage := 'Err3';
    DataSet := ClientDataSet1;
  end;

  with TStringField.Create(Self) do begin
    FieldName := 'Email';
    Size := 21;
    CustomConstraint := 'Lower(x) Like ''%@gmail.com'''; { 假如只能是 Google 信箱}
    ConstraintErrorMessage := 'Err4';
    DataSet := ClientDataSet1;
  end;

  ClientDataSet1.CreateDataSet;

  ClientDataSet1.AppendRecord([1, '张三', '男', '123@gmail.com']);
  ClientDataSet1.AppendRecord([2, '张四', '女', 'ABC@GMAIL.COM']);
end;

{ 禁用限制 }
procedure TForm1.Button1Click(Sender: TObject);
begin
  ClientDataSet1.DisableConstraints;
end;

{ 启用限制 }
procedure TForm1.Button2Click(Sender: TObject);
begin
  ClientDataSet1.EnableConstraints;
end;

 
 
 
 
 

 

 

  

使用数据集的 Constraints 属性重做上面的例子:
procedure TForm1.FormCreate(Sender: TObject);
begin
  with ClientDataSet1.FieldDefs do begin
    Add('ID', ftInteger);
    Add('Name', ftString, 11);
    Add('Sex', ftString, 2);
    Add('Email', ftString, 21);
  end;

  with ClientDataSet1.Constraints.Add do begin
    CustomConstraint := 'ID>0 and ID<100'; { 其中的 ID 是字段名 }
    ErrorMessage := 'Err1';
  end;

  with ClientDataSet1.Constraints.Add do begin
    CustomConstraint := 'Name Like ''张%''';
    ErrorMessage := 'Err2';
  end;

  with ClientDataSet1.Constraints.Add do begin
    CustomConstraint := 'Sex in(''男'', ''女'')';
    ErrorMessage := 'Err3';
  end;

  with ClientDataSet1.Constraints.Add do begin
    CustomConstraint := 'Lower(Email) Like ''%@gmail.com''';
    ErrorMessage := 'Err4';
  end;

  ClientDataSet1.CreateDataSet;

  ClientDataSet1.AppendRecord([1, '张三', '男', '123@gmail.com']);
  ClientDataSet1.AppendRecord([2, '张四', '女', 'ABC@GMAIL.COM']);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ClientDataSet1.DisableConstraints;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ClientDataSet1.EnableConstraints;
end;

 
 
 
 
 

 

 

  

数据集的 Constraints 和字段的 CustomConstraint 也都可以在设计时完成.

不过其中的 ConstraintErrorMessage 和 ErrorMessage 在当前版本(14.0.3593.25826)中有 bug;
我在 Delphi 2007 中测试了一下, 没有问题.

本文转载自:http://www.cnblogs.com/del/archive/2010/02/09/1666783.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
TClientDataSet使用(二)

转自:http://hi.baidu.com/zwl232/blog/item/76f011dfc9543812622798f2.html TClientDataSet    与TTable、TQuery一样,TClientDataSet也是从TDataSet继承下来的,它通常用于多层体系结构的......

天地弦
2007/06/01
0
0
ClientDataSet探讨(1)-介绍

KeyLife富翁笔记 作者: hongxingdl 标题: ClientDataSet探讨(1)-介绍 关键字: midas 分类: 开发经验 密级: 公开 与TTable、TQuery一样,TClientDataSet也是从TDataSet继承下来的,...

天地弦
2004/08/06
0
0
oracle中查询所有外键引用到某张表的记录

oracle中查询所有外键引用到某张表的记录 其实查找这篇文章 我主要用的sql 是这句 select * from user_cons_columns t where t.constraint_name like 'FK_CTS_CONT_REINS__CRR'; 起因: 系统...

狮子暴走
2014/03/02
0
0
表单验证第一部分:使用 HTML 和 CSS技巧对表单进行约束验证

表单验证第一部分:使用 HTML 和 CSS技巧对表单进行约束验证 W3CPlus2017-08-0757 阅读 技巧约束表单html验证css 大多数的JavaScript表单验证类库体积都非常庞大,而且往往需要引入其他的库,...

W3CPlus
2017/08/07
0
0
Play 2.0 用户指南 - 表单提交和验证 --针对Scala开发者

处理表单提交 定义一个表单 play.api.data 包中包含了一些助手方法,用于处理HTTP表单数据提交和验证。操纵表单提交最容易的方式是定义一个 play.api.data.Form 结构: import play.api.data...

大东哥
2012/03/20
0
1

没有更多内容

加载失败,请刷新页面

加载更多

DeepMind 开源图神经网络的代码

用于支持论文《Relational inductive biases, deep learning, and graph networks》。 github A graph network takes a graph as input and returns a graph as output. The input graph has......

shengjuntu
12分钟前
0
0
python2编码详解、一

以前使用python3没觉的什么,跟着公司使用python2后被编码问题折磨的痛不欲生,好好研究了一下编码问题,参考了很多博文,加入自己的理解,这里只是对编码的介绍,下一篇是python2中编码问题...

hc321
21分钟前
0
0
基于OpenSSL的一些常用加密签名算法

目前包括:MD5、SHA512、DES、RSA加解密、RSA+MD5签名验证算法,在openssl基础上再进行封装,使用简单,头文件需要包含openssl库,可以使用vcpkg自动管理,省去繁琐的配置工程的过程。 该RSA...

LoSingSang
29分钟前
0
0
spring Data JPA

什么是JPA? 全称Java Persistence API,可以通过注解或者XML描述【对象-关系表】之间的映射关系,并将实体对象持久化到数据库中。 为我们提供了: 1)ORM映射元数据:JPA支持XML和注解两种元...

狼王黄师傅
34分钟前
0
0
微信小程序 - 使用七牛云 API 截取第 n 秒图像为封面图

前面分享过七牛的上传操作,在这里说下使用七牛 api 对视频在页面的处理,比如你的视频上传之后获取七牛视频链接,这时候你怎么展示它呢? 在页面可以使用小程序提供的原生组件 video ,可以...

几个栗子
37分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部