日期输入格式错误的异常处理?(50分)

  • 主题发起人 主题发起人 hedana1977
  • 开始时间 开始时间
H

hedana1977

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的dbgrideh的表格控件。显示了3个字段。日期,标题,姓名。添加记录的时候,输入日期时候,比如输入2008-56-20(这里我已经用了掩码,YYYY-MM-DD,如果月和日期的范围如果超了),系统提示输入错误。我想把这种系统提示错误转成我设置的错误提示,我用了异常处理。
try
表名.append;
except
showmessage('日期输入错误');
end
但是不能达到效果,谁知道这里该怎么实现这个功能
 
try
表名.append;
except
on e: exception do
begin
ShowMessage('日期输入错误: '+e.Message);
...//可以添加其他你想处理的过程。
end;
end;
 
上面的兄弟,你的方法不行呀。还是和我原来一样,输入日期的时候,月和日超范围了的话,焦点移到下一个字段的时候,提示'2008-56-35 ' is not a valid date and time.
并没有提示我要的 “日期输入错误”。
 
其实你本来写的就是对的

那个错误在DELPHI开发环境里面会蹦出来

对编译好的exe文件直接运行就没有了。 没有关系的
 
你在点击写入数据库按钮的时候,对你要写入的数据进行检查就是了,尽量不要在写入的过程中来靠异常提供信息萨,这样不就可以了嘛。直接转换成日期,如果转换报错,那就提示错误,不去靠写入数据库引发异常来提示,多好萨。
 
//* 日期字段校验 *//
procedure MyDateSetText(Sender: TField; const Text: string);

procedure TFrmBsSheet.MyDateSetText(Sender: TField; const Text: string);
var
tmp_Date: TDateTime;
iYear: word;
iMonth: Word;
iDay: Word;
iLen: integer;
tmp_Text: string;
begin
tmp_Text := Trim(Text);
if tmp_Text = '' then
begin
Sender.Value := Null;
Exit;
end;
try
iLen := Length(Trim(tmp_Text));
//格式转换,比如输入0901,090105,20080102
case iLen of
4: tmp_Text := '20' + Copy(Trim(tmp_Text), 1, 2) + '-' + Copy(Trim(tmp_Text), 3, 2) + '-01';
6: tmp_Text := '20' + Copy(Trim(tmp_Text), 1, 2) + '-' + Copy(Trim(tmp_Text), 3, 2) + '-' + Copy(Trim(tmp_Text), 5, 2);
8: tmp_Text := Copy(Trim(tmp_Text), 1, 4) + '-' + Copy(Trim(tmp_Text), 5, 2) + '-' + Copy(Trim(tmp_Text), 7, 2);
end;

tmp_Date := StrToDate(tmp_Text);
DecodeDate(tmp_Date, iYear, iMonth, iDay);
Sender.Value := EncodeDate(iYear, iMonth, iDay);
except
ShowMessage('错误日期');
end;
end;

调用
ADO_Master.FieldByName('日期').OnSetText := MyDateSetText;
 
我覺得可能是不是你寫的判斷語句的地方不對?
如果控件有判斷,那麼,肯定有一個判斷的事件,裡面可以修改出錯的提示信息.
如cx系列的控件就有,不過那個控件好久沒用,忘了
比如 控件的Validate事件中
 
LZ用的方法真是土~[:D]
用cqwty的方法就可以呀~
try
tmp_Date := StrToDate(tmp_Text);
except
ShowMessage('错误日期');
end;
 
用try...老土!最简单的是用dx或cx日期控件,设置validate属性就可以了。
 
HEHUISOFT说的很正确。要在ADODATASET的 settext事件里面写才行。我由于已经设置了掩码,所以不用判断了。我最后的代码是

procedure Tfhsegl.hsekriqiSetText(Sender: TField; const Text: String);
Var
DT: TDateTime;
s:string;
begin
s:=trim(text);
if TryStrToDate(s, DT) then hsek['riqi']:=s//TryStrToDate判断日期格式是否合法
else ShowMessage('日期格式錯誤');
end;
 
多人接受答案了。
 
后退
顶部