兄弟现在做三层的动态强制约束编程,有一个问题始终解决不了,就是服务器端编辑
DataSetProvider的属性,将业务约束写入的时候,就是不能,服务器端报错。代码如下:
//获取相关数据
  ADOFulwel.SQL.Clear;
  ADOFulwel.Close;
  ADOFulwel.SQL.Add(str_sql) ;
  vdata:=AS_GetRecords('dspFull',-1,Count,byte(Option),'',Params,vdata1);
//取业务约束数据
ADOQuery1.active;
//加入业务约束
Field:=dspFull.dataset.Fields[0];while not ADOQuery1.Eof do
    begin
      I:=0 ;
      Field:=ADOFulwel.Fields[0];
      Field.ConstraintErrorMessage := ADOQuery1.fieldbyname('ConstraintErrorMessage').AsString;
      Field.CustomConstraint := ADOQuery1.fieldbyname('CustomConstraint').AsString;
      Field.DisplayLabel :=  ADOQuery1.fieldbyname('DisplayLabel').AsString ;
      Field.EditMask :=  ADOQuery1.fieldbyname('EditMask').AsString ;
      Field.Visible :=  ADOQuery1.fieldbyname('Visible').AsBoolean ;
      Field.Required :=  ADOQuery1.fieldbyname('Required').AsBoolean ;
      Field.ReadOnly :=  ADOQuery1.fieldbyname('ReadOnly').AsBoolean ;
    end;
在给field的属性赋值时,系统报错。
哪位给看看??

解决方案 »

  1.   

    是不是得先add fields对像啊?
    不一定对!
      

  2.   

    我是要修改查询出的记录的Field属性。
      

  3.   

    while not ADOQuery1.Eof do
        begin
          showmessage('ok,begin upd fields pro.');
          I:=0 ;
          FieldName:=ADOQuery1.fieldbyname('fieldname').AsString ;
          with ADOFulwel do
          begin
            fieldbyname(FieldName).EditMask:=ADOQuery1.fieldbyname('EditMask').AsString ;
            fieldbyname(FieldName).ConstraintErrorMessage := ADOQuery1.fieldbyname('ConstraintErrorMessage').AsString;
            fieldbyname(FieldName).CustomConstraint := ADOQuery1.fieldbyname('CustomConstraint').AsString;
            fieldbyname(FieldName).DisplayLabel :=  ADOQuery1.fieldbyname('DisplayLabel').AsString ;
            fieldbyname(FieldName).Visible :=  ADOQuery1.fieldbyname('Visible').AsBoolean ;
            fieldbyname(FieldName).Required :=  ADOQuery1.fieldbyname('Required').AsBoolean ;
            fieldbyname(FieldName).ReadOnly :=  ADOQuery1.fieldbyname('ReadOnly').AsBoolean ;
            if fieldbyname(FieldName) is TNumericField then
            begin
              with fieldbyname(FieldName) as TNumericField do
                DisplayFormat :=  ADOQuery1.fieldbyname('DisplayFormat').AsString ;
              if fieldbyname(FieldName) is TFloatField then
                with fieldbyname(FieldName) as TFloatField do
                begin
                  MinValue := StrToInt( ADOQuery1.fieldbyname('MinValue').AsString  );
                  MaxValue := StrToInt( ADOQuery1.fieldbyname('MaxValue').AsString  );
                end
              else if fieldbyname(FieldName) is TBCDField then
                with fieldbyname(FieldName) as TBCDField do
                begin
                  MinValue := StrToInt( ADOQuery1.fieldbyname('MinValue').AsString  );
                  MaxValue := StrToInt( ADOQuery1.fieldbyname('MaxValue').AsString  );
                end
              else if fieldbyname(FieldName) is TIntegerField then
                with fieldbyname(FieldName) as TIntegerField do
                  begin
                    MinValue := StrToInt( ADOQuery1.fieldbyname('MinValue').AsString  );
                    MaxValue := StrToInt( ADOQuery1.fieldbyname('MaxValue').AsString  );
                  end
              else if fieldbyname(FieldName) is TLargeIntField then
                with fieldbyname(FieldName) as TLargeIntField do
                  begin
                    MinValue := StrToInt(  ADOQuery1.fieldbyname('MinValue').AsString  );
                    MaxValue := StrToInt(  ADOQuery1.fieldbyname('MaxValue').AsString  );
                  end;
            end
            else if fieldbyname(FieldName) is TDateTimeField then
              with fieldbyname(FieldName) as TDateTimeField do
                DisplayFormat :=  ADOQuery1.fieldbyname('DisplayFormat').AsString ;
          end; 
         end;
      

  4.   

    Chinagoogle(青橄榄) 到 http://expert.csdn.net/Expert/topic/1822/1822895.xml?temp=.8045313 领分。