文档章节

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

没有更多内容

加载失败,请刷新页面

加载更多

斗图咖(www.doutuka.com)上线纪念

网站名称:斗图咖 网站描述:是一款年轻人都在玩的斗图网站,来斗图咖一起斗图装逼交朋友吧。站长每天上传收集的最新最火斗图,供大家娱乐聊天发表情;后期也会开发表情自主设计,自己设计表...

focusone
16分钟前
2
0
Spring AOP 切面编程记录日志和接口执行时间

最近客户现在提出系统访问非常慢,需要优化提升访问速度,在排查了nginx、tomcat内存和服务器负载之后,判断是数据库查询速度慢,进一步排查发现是因为部分视图和表查询特别慢导致了整个系统...

编程SHA
27分钟前
5
0
年度大盘点:机器学习开源项目及框架

摘要: 2018年马上就要结束了,我们来回顾一下过去的这一年中,机器学习领域有哪些有趣的事情吧! 我们先来看看Mybridge AI 中排名靠前的顶级开源项目,再聊聊机器学习今年都有哪些发展,最后...

阿里云官方博客
30分钟前
6
0
15个Spring的核心注释示例

众所周知,Spring DI和Spring IOC是Spring Framework的核心概念。让我们从org.springframework.beans.factory.annotation和org.springframework.context.annotation包中探索一些Spring核心注......

java菜分享
32分钟前
2
0
[LintCode] Binary Tree Level Order Traversal(二叉树的层次遍历)

描述 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 样例 给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7 返回他的分层遍历结果: [ [3], [...

honeymose
41分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部