自做一桌面数据库,数据源是dbf表,其中一字段为数值型(8,2)结构,发现无论在dbgrid或dbedit输入或修改数据时,对输入的长度和格式都无法控制,比如整数位是5位,但在输入时可以随便超过,且一回车更新时程序就死机,把table控件的fields的editformat和displayformat属性都定义成9999.99;1;_也无用...
怎么办,高手救命,在线...

解决方案 »

  1.   

    你看将字段的Size设置一下行不?
      

  2.   

    怎么个"TField的EditMask属性",找不到,怎么设置啊,高手请说清楚啊?
      

  3.   

    你再添一个检查位数的方法就应当能搞定你的问题
    procedure TfrmMainBuild.edtBuildHeightKeyPress(Sender: TObject;
      var Key: Char);
    begin
      if not (Key in ['0', '1', '2', '3', '4', '5', '6', '7',
        '8', '9', Char(8), '.']) then
      begin
        Key := Char(8);
        Beep;
      end;
    end;
      

  4.   

    BCB中是这样控制的:
    ((TNumericField *)ADOQuery2->Fields->Fields[2])->DisplayFormat = "#.########"
    delphi中我没试过,我想可能是:
    var 
       TempField:TNumericField;
       TempField := (ADOQuery2.Fields.Fields[2]) as TNumericField;
       TempField.DisplayFormat := '#.#####';ADOQuery2通过DataSource绑定到DBGrid
      

  5.   

    奇怪啊!我这样写:
    Table1.Fields[9].EditMask:='9999.99';
    如果严格输一个"1234.56"之类的数就没问题,但输 "123" 或 "123.45" 之类反正
    不是严格的"9999.99"样子就要死机,我怎么办啊!
      

  6.   

    引出fields后,
    使用ADODataSetDSDesignerGetText方法
    对Sender引出的值做格式化后写入text值
      

  7.   

    设置DBEDIT的属性EDITFORMAT和DISPLAYFORMAT可控制输入格式和显示格式
    DBGRID中:
    function InputNumberInDBGrid(DBGrid : TDBGrid; var Key : char):Boolean;
    var
      p:integer; tp:TPoint;
    begin
      if key in ['0'..'9','.'] then  //这里要加上‘+’和‘-’
      begin
        if key in ['+','-'] then
        begin
          p:=pos('+',DBGrid.SelectedField.Text)+pos('-',DBGrid.SelectedField.Text);
          if p>0 then
            key:=#0
          else begin
            GetCaretPos(tp);
            if tp.x>1 then
              key:=#0;
          end;
        end else
          if key='.' then
          begin
            p:=pos('.',DBGrid.SelectedField.Text);
            if p>0 then
              key:=#0;
          end;
      end else
        if key>#31 then  //这条语句要去掉吧
          key:=#0;
    end;
      

  8.   

    大哥,这个函数写在那里,是不是用在Form的onCreate里啊