zoukankan      html  css  js  c++  java
  • TClientDataSet[27]: 字段值的约束(或叫输入限制)


    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 中测试了一下, 没有问题.

  • 相关阅读:
    net 5 小常识试图及时编译
    C# CLR核心机制
    grpc 错误记录一下 掉坑里爬了三天
    基于docker 做的 kafka 集群 3分区
    efcore 查用命令
    vps检测
    IntelliJ Idea 2017 免费激活方法
    jQuery设置disabled属性与移除disabled属性
    Myeclipse中js文件中的乱码处理
    关于html中frameset下frame之间的交互,以及html中iframe和原html之间的交互
  • 原文地址:https://www.cnblogs.com/del/p/1666783.html
Copyright © 2011-2022 走看看