文档章节

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
oracle中查询所有外键引用到某张表的记录

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

狮子暴走
2014/03/02
0
0
ClientDataSet探讨(1)-介绍

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

天地弦
2004/08/06
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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Ubuntu18.04 显卡GF-940MX安装NVIDIA-390.77

解决办法: 下面就给大家一个正确的姿势在Ubuntu上安装Nvidia驱动: (a)首先去N卡官网下载自己显卡对应的驱动:www.geforce.cn/drivers (b)下载后好放在英文路径的目录下,怎么简单怎么来...

AI_SKI
今天
0
0
深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
今天
0
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
今天
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
2
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部