edit.text的变化问题

fine444 2009-02-20 04:50:47
我的窗体上有几个dbedit和edit,我想让edit.text跟随dbedit变化,我的代码如下

procedure TForm8.FormCreate(Sender: TObject);

var
loginstr:string;
sumday:integer;
begin

loginstr:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+ExtractFilePath(ParamStr(0)) +'人事管理系统.mdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";';
ADOConnection1.Connected:=false;
ADOConnection1.ConnectionString:=loginstr;
ADOConnection1.Connected:=true;

ADOQuery1.Active:=true;
sumday:=DaysInMonth(Strtodate(DBEdit4.text+'-01'));
edit2.Text:=FloatToStr(Round((StrToFloat(dbedit6.Text)/sumday )*StrToFloat(dbedit5.Text)));
edit1.Text:=FloatToStr(StrToFloat(DBEdit17.Text)+StrToFloat(DBEdit14.Text)+StrToFloat(DBEdit15.Text)+StrToFloat(DBEdit16.Text));
edit4.Text:=FloatToStr(StrToFloat(edit2.Text)+StrToFloat(DBEdit13.Text)+StrToFloat(DBEdit7.Text)+ StrToFloat(DBEdit8.Text)+StrToFloat(DBEdit9.Text)+StrToFloat(DBEdit10.Text)+StrToFloat(DBEdit11.Text)+StrToFloat(DBEdit12.Text));
edit3.Text:=FloatToStr(StrToFloat(edit4.Text)-StrToFloat(edit1.Text));
end;


procedure TForm8.DBEdit4Change(Sender: TObject);

var
sumday1:integer;
begin
sumday1:=DaysInMonth(Strtodate(DBEdit4.text+'-01'));
edit2.Text:=FloatToStr(Round((StrToFloat(dbedit6.Text)/sumday1 )*StrToFloat(dbedit5.Text)));
edit1.Text:=FloatToStr(StrToFloat(DBEdit17.Text)+StrToFloat(DBEdit14.Text)+StrToFloat(DBEdit15.Text)+StrToFloat(DBEdit16.Text));
edit4.Text:=FloatToStr(StrToFloat(edit2.Text)+StrToFloat(DBEdit13.Text)+StrToFloat(DBEdit7.Text)+ StrToFloat(DBEdit8.Text)+StrToFloat(DBEdit9.Text)+StrToFloat(DBEdit10.Text)+StrToFloat(DBEdit11.Text)+StrToFloat(DBEdit12.Text));
edit3.Text:=FloatToStr(StrToFloat(edit4.Text)-StrToFloat(edit1.Text));
end;


现在它老是提示‘'-01'‘不是一个有效的DATE,我的DBEdit4.text是’2008-06‘这样的格式,而且数据库中的DBEdit4.text都不为空,只运行FormCreate时并不报错。


...全文
131 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fine444 2009-02-20
  • 打赏
  • 举报
回复
华哥就是见多识广 adoquery1.afterscroll 这个事件刚刚好
starluck 2009-02-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fine444 的回复:]
引用 3 楼 starluck 的回复:
Delphi(Pascal) code

procedure TForm8.DBEdit4Change(Sender: TObject);

var
sumday1:integer;
FormatSettings:TFormatSettings;
vDate : TDateTime;
begin
if sender.isNull then exit;
FormatSettings.DateSeparator:='-';
FormatSettings.TimeSeparator:=':';
FormatSettings.ShortDateFormat:='yyyy-MM-dd';
TryStrToDateTime(trim(DBEdit4.text)+'-0…
[/Quote]


不好意思,看錯了。我看成數據集的了。

starluck 2009-02-20
  • 打赏
  • 举报
回复
如果你下面的確確是DBEDIT系統的感應組件,與數據集也做了關聯,那就不用寫上面的代碼。

對於整條記錄的滾動判斷放到: adoquery1.afterscroll 這類事件去寫。

某一個字段改變了在ONCHANGE裏,但你的前期判斷要做好,不然太不穩定了。
fine444 2009-02-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
DBEdit4.text,在编辑状态下是读不到的,post后才能读到,所以不要用dbedit
[/Quote]

那为什么只有formcreate事件可以呢?
fine444 2009-02-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 starluck 的回复:]
Delphi(Pascal) code

procedure TForm8.DBEdit4Change(Sender: TObject);

var
sumday1:integer;
FormatSettings:TFormatSettings;
vDate : TDateTime;
begin
if sender.isNull then exit;
FormatSettings.DateSeparator:='-';
FormatSettings.TimeSeparator:=':';
FormatSettings.ShortDateFormat:='yyyy-MM-dd';
TryStrToDateTime(trim(DBEdit4.text)+'-01',vDate,formatSettings);
sumday1 :=…
[/Quote]

isnull无法识别
fine444 2009-02-20
  • 打赏
  • 举报
回复
我想做出来的效果是上面是一个dbgrid,下面有一堆dbedit和edit,当拖动dbgrid时,下面的都跟着变化
yct0605 2009-02-20
  • 打赏
  • 举报
回复
dbedit是数据感知控件,而且写在onchange里面程序容易报错。
Corn1 2009-02-20
  • 打赏
  • 举报
回复
不要写在OnChange里面,不然,日期的格式有可能不对
比如说,你输入一个2,日期变成了'2-01'
可以输入完成以后,按一个回车,写在OnKeyPress里面,判断回车。
starluck 2009-02-20
  • 打赏
  • 举报
回复


procedure TForm8.DBEdit4Change(Sender: TObject);

var
sumday1:integer;
FormatSettings:TFormatSettings;
vDate : TDateTime;
begin
if sender.isNull then exit;
FormatSettings.DateSeparator:='-';
FormatSettings.TimeSeparator:=':';
FormatSettings.ShortDateFormat:='yyyy-MM-dd';
TryStrToDateTime(trim(DBEdit4.text)+'-01',vDate,formatSettings);
sumday1 := DaysInMonth(vDate);
edit2.Text:=FloatToStr(Round((StrToFloat(dbedit6.Text)/sumday1 )*StrToFloat(dbedit5.Text)));
edit1.Text:=FloatToStr(StrToFloat(DBEdit17.Text)+StrToFloat(DBEdit14.Text)+StrToFloat(DBEdit15.Text)+StrToFloat(DBEdit16.Text));
edit4.Text:=FloatToStr(StrToFloat(edit2.Text)+StrToFloat(DBEdit13.Text)+StrToFloat(DBEdit7.Text)+ StrToFloat(DBEdit8.Text)+StrToFloat(DBEdit9.Text)+StrToFloat(DBEdit10.Text)+StrToFloat(DBEdit11.Text)+StrToFloat(DBEdit12.Text));
edit3.Text:=FloatToStr(StrToFloat(edit4.Text)-StrToFloat(edit1.Text));
end;






總體來說,你的代碼太不稱定。如果人家輸的不合法你也強制轉換也還是會錯。

starluck 2009-02-20
  • 打赏
  • 举报
回复


sumday1:=DaysInMonth(Strtodate(trim(DBEdit4.text)+'-01'));

bdmh 2009-02-20
  • 打赏
  • 举报
回复
DBEdit4.text,在编辑状态下是读不到的,post后才能读到,所以不要用dbedit

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧