如何妨止用户输入非法日期数据?(100分)

  • 主题发起人 主题发起人 xhhua
  • 开始时间 开始时间
X

xhhua

Unregistered / Unconfirmed
GUEST, unregistred user!
请教各位前辈:
本人进行数据库编程,内有日期数据类型字段,
输入非法的日期数据类型时(如13月、39日或非数字),系统出错,
如何可防止用户在使用中输入非法日期数据?
 
在EDIT的ONEXIT事件中处理一下,若不是正确的日期,则要求用户重新输入:
var
adate:TDateTime;
begin
try
adate:=StrToDate(Edit1.text);
except
showmessage('非法日期格式!正确的日期格式为。。。。');
edit1.setfocus;
end;
end;
 
用delphi 自带的控件。
 

用Win32页上的DateTimePicker控件问题就解决了,

用户一个字也不用输入。

我一直都是这样做的。
 
用win32的datetimepicker控件或用rxlib中的dateedit控件,rxlib到处都可以下载的。
 
应用中输入如无需数据感应,则可用ONEXIT事件驱动TRY。。。EXCEPT方法,或
用DateTimePicker控件。
如果输入需要数据感应,可上深度历险找一个有数据感应能力的日期控件,我用的
是Alfra的ALDATE控件,可和数据库直接挂上对应。除了防止非法日期外,对界面
和用户使用方便方面都有好处。类似控件比较多,多试用几个,定有收获。
 
1.g:yck
2.最好用Win32页上的DateTimePicker控件。
 
如果你用TEdit
在提交时ONExit事件

try
strtodate(edit1.text);
except
...//错误处理代码
end;
编译时将Debugger opration 右下脚 integated debugging关掉即可
当然能用以上方法更好
 
ongettext even

try
strtodatetime(text)
except
error message
end
 
对,我同意耀彰兄的意见,使用Win32页上的DateTimePicker控件,它可以让用户设置和选择日期和时间。若将它的kind特性设为dtdate,并将DateMode特性设为dmComboBox时,下拉日历控制时将弹出一个日历,供用户选择。




 
用DATETIMEPICKER时我有一次把系统都搞崩了,诸位大侠有没有什么办法
在FORMAT里处理这个问题?
 
>>用DATETIMEPICKER时我有一次把系统都搞崩
DATETIMEPICKER有这么厉害?可能是别的问题吧.
我一直用Infopower的wwDateTimePicker,从来没出问题.
Infopower里有很多好东东,可以省下很多麻烦事.
 
日期出错,在TEDIT上容易解决,但是在TDBGRID上输入时,截取不到出错的事件,
我采取了变通的办法:
方法1.把系统处理异常的句柄指向为自己的定义的异常处理.

方法2.在写SQL语句时,定义一个字符类型的字段A,
使用永久字段,在字段A的ONVALIDATE事件中判断输入的字符是否为非法的日期
 
用YCK的办法吧,实用性强,我就是这么做的
 
在BeforePost中处理异常。
 
如果在月份栏输入了“1”字,跟住在按“3”字的时候,我想电脑发出警告声提醒,
并且“3”字并没有输入到输入框里面,那又怎样才能做到呢?
 
在月份栏的keypress事件可加入如下代码:
begin
if key>='A' then
begin
key:=#0;
end;
if edit1.text<>'' then
if key>'2' then
begin
showmessage('sdfsd');
key:=#0;
beep();
end;
end;
 
好像不用这样担心,在实际编程中我发现当你的dbedit(应该是这个控件来输入的)
和数据库相连后,但输入的数据格式不是日期格式,它会提示出错得
 
如果用DATETIMEPICKER,而我需要输入的日期的范围很大,有好几十年的跨度,那在输入数据的时候,前后翻来翻去不是太麻烦了吗,有什么控件能解决这种大范围日期输入的问题呢,最好也是用日历形式的
 
后退
顶部