我的窗体上有几个dbedit和edit,我想让edit.text跟随dbedit变化,我的代码如下procedure TForm8.FormCreate(Sender: TObject);var
loginstr:string;
sumday:integer;
beginloginstr:='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时并不报错。
loginstr:string;
sumday:integer;
beginloginstr:='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时并不报错。
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;
總體來說,你的代碼太不稱定。如果人家輸的不合法你也強制轉換也還是會錯。
比如说,你输入一个2,日期变成了'2-01'
可以输入完成以后,按一个回车,写在OnKeyPress里面,判断回车。
那为什么只有formcreate事件可以呢?