你最好都不用DBEDIT,因为这样数据输入的控制不方便

解决方案 »

  1.   

    Table.Edit;
    Table.FieldByName('rq').AsDateTime := dtp.Date;
    Table.Post;
      

  2.   

    一个简单的解决办法是把你原先的那个DBEdit还放在上面,只不过是隐藏的,然后输入完日期之后把它赋给DBedit。
      

  3.   

    用DBEDIT,在退出DBEDIT时会自动判断是否合法,你可以拦截错误提示,加上
    自己的提示。
    如果用日期控件,你可以在DBNAVIGATE的onclick或datasource的ondatachange
    里写 datetimepicker1.date:=query1.field.asdatetime
      

  4.   

    你放一个DateTimePicker,然后把它赋给DBEdit
    不过最好是给DBEdit发一个Message否则它不会自动更新
    我就是这样弄的,Boss大呼:好神奇,我当即晕倒~~
      

  5.   

    Table.edit;
    Table['rq']:=dtp.date;
    Table.post;
      

  6.   

    我以前是这样做的.
        在DBEDIT的ONENTER事件里,动态创建DateTimePicker,位置紧贴DBEDIT,
    大小刚好等同三角按纽大小,而DBEDIT不能编辑,只能通过DateTimePicker来
    获得时间,当时间确定好以后,记得在DBEDIT的ONEXIT事件里释放DateTimePicker.
    最好是写成类或是函数形式来调用,多次调用代码就简洁多了.
      

  7.   

    在dbedit的onexit事件中写
    try
      Table.FieldByName('rq').AsDateTime:=strtodatetime(dbedit.text);
    except
      raise exception.create('请输入正确的日期');
    end;不行吗?
      

  8.   

    1,用的三方控件2,如果可能,不用dbedit,用edit 或 maskedit 或 datetimepicker
      

  9.   

    可以使用第三方的数据;或是输入控件还用DBEDIT,但在它旁边加一个小按钮,点击弹出自己作的日期输入窗体(内含MonthCalendar)帮助用户选择日期,如  按钮单击代码如下:
     frmShowDate.GetDate(DBEdit1);日期输入窗体为frmShowDate,其中GetDate代码如下
    procedure TfrmShowDate.GetDate(AControl: TCustomEdit);
    var
      APoint: TPoint;
    begin
      APoint.X := AControl.Left;
      APoint.Y := AControl.Top;
      APoint := (AControl.Parent as TControl).ClientToScreen(APoint);
      frmShowDate.Left := APoint.X;
      frmShowDate.Top := APoint.Y + AControl.Height;  try
        MonthCalendar1.Date := StrToDate(AControl.Text);
      except
        MonthCalendar1.Date := Date;
      end;    
      if frmShowDate.ShowModal=mrOK then
        AControl.Text := DateToStr(MonthCalendar1.Date);
    end;
      

  10.   

    用DBEdit显示,用日期控件来修改,就不会出错了。
      

  11.   

    使用日期控件。
    在Post之前将输入值用代码写到字段对象里。
    其实用代码给字段对象赋值的情况是常见的,比如给某些字段赋缺省输入值。
      

  12.   

    Table.edit;
    Table['rq']:=dtp.date;
    Table.post;
      

  13.   

    try
      strtodatetime(dbedit.text);
    except
      raise exception.create('请输入正确的日期');
      

  14.   

    http://www.csdn.net/expert/topic/678/678091.xml?temp=.3668024
      

  15.   

    不好意思,刚才粘错了
    其实你可以自己写一个控件来做这件事,很简单的。从Datetime控件继承下来,再放上一个TDataLink在里面负责与数据进行会话。发布TDataSource和TKeyField属性就行了。很多地方都有相应的例子。比如程序员大本营2002的Borland版里面就有这个实例。
      

  16.   

    处理数据库日期型字段的显示与输入unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Db, DBTables, StdCtrls, Mask, DBCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        Table1: TTable;
        Table1Birthday: TStringField;
        DataSource1: TDataSource;
        DBEdit1: TDBEdit;
        DBNavigator1: TDBNavigator;
        procedure FormActivate(Sender: TObject);
        procedure Table1BirthdayGetText(Sender: TField; var Text: String;
          DisplayText: Boolean);
        procedure Table1BirthdaySetText(Sender: TField; const Text: String);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation
      uses unit2;
    {$R *.DFM}procedure TForm1.FormActivate(Sender: TObject);
    //设置一个日期型字段的输入掩码,可以放到TField字段定义中。
    begin
      Table1.FieldByName('Birthday').EditMask:= '!9999\年!99\月!99\日;1; ';
    end;procedure TForm1.Table1BirthdayGetText(Sender: TField; var Text: String;
      DisplayText: Boolean);
    begin
      DateFieldGetText(Sender,Text);
    end;procedure TForm1.Table1BirthdaySetText(Sender: TField; const Text: String);
    begin
      if DateFieldSetText(Sender,Text)=False then
        Abort;
       //转换不成功,日期非法}
    end;end.