sql 7 与 DELPHI 5 在处理 DATETIME字段上的问题(50分)

  • 主题发起人 主题发起人 Mischa
  • 开始时间 开始时间
M

Mischa

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个关于DELPHI的TDATETIME与SQL 7的DATETIME字段用法上的问题有求于
各位大虾。

是这样的:


我在一个SQL 7数据库中有一个DATETIME字段, 我不往里面存数据时,这个DATETIME
字段的值当然是NULL,我在前台用DELPHI 5的DBEDIT控件与SQL 7的这个数据库相连。
在输入字段值和修改都没有问题。问题就在于我为了加强易用性,在DELPHI的这个
日期字段对象的EDITMASK属性上加上控制符:!9999/99/99;1,这样的话用户输入的时候
就有规定的格式“____-__-__”,问题便因此产生,当用户输入日期后,再想删除却总
是报错,说日期值非法。

俺后来没有办法,只能删除这个EDITMASK,在日期控件的KEYPRESS事件中加入代码,
让用户以YYYYMMDD格式输入,再由代码将之转换成YYYY-MM-DD格式。

-----------
感谢上次回答我问题的两位朋友,我已酌情发出分数。这次还是50分,因为本人是个菜鸟,
这些问题并非高难度的问题,是缺乏经验。

再次谢谢。

 
想删除时按Esc即可。
 
daiqingbo:

实在对不起,大概是我没有把话说清楚。
我不是说用户输入后取消刚才的输入,而是用户删除输入,让这个DATETIME字段
为空。
如,第一天用户在入党日期字段输入1972-12-19,第二天才发觉这个家伙是混进
革命队伍里的坏蛋 :-)于是要把这个字段的值删除,也就是将这个字段的值置为
NULL。问题就在这儿出现了。只要按DEL删除,回车后就会出现“不正确的日期值”
错。

为什么?

不过,还是要谢谢daiqingbo兄回答问题^_^.
 
难道就没有人再回答吗? wuwu... :'(..
并不难呀!
我只想只到无法在DBEDIT中用MASKEDIT后删除出错的道理。


 
在这个DBEdit控件的OnExit中做一下控制:
利用临时变量判断值的合法性(try...except...)。
如果不合法,可将其值强制为0,或要求重新输入。
 
可以使用RXLIB中的控件editdate
 
我想是你的控件的值在作怪。
当变量中为空时,字符‘- -’将传给数据库中的日期变量,那数据库当然不认。你可以看一看在DELETE时,传给数据库的MASKEDIT中的值是什么。
 
Mischa 兄:
我是这样做的:让日期字段设为:!9999/99/99;1,(____-__-__).
在日期字段的SetText处写下如下代码:
If (Copy(Text,1,4)<>' ') and (Copy(text,6,2)<>' ') and
(Cpy(text,9,2)<>' ') Then
begin
Table1['日期字段']:=Text;
end
else
table1['日期字段']:=null;
注:单引号内的空格分别为4,2,2(对应年,月,日的输入格式).
我在Delphi5+sql7.0的三层应用程序中调试通过.
 
随便找个控件都能解决,用InfoPower 2000吧,里面有专门的wwdbDateTime控件
要是你一定用文本框输入设一下字段的PictureMask属性就搞定了
 
删除时,给该字段的值变成空格即可(令该字段值='')
 
不好意思,借Mischa的宝地一用,
我也正好遇到这个问题,将字段值设为0时,
数据库里所存的日期变成1899-12-31, 而
不是原来的空, 要如何才能将该字段设为空呢?

我是用QUERY,
Query1.Sql.Add('INSERT TABLE1 (RKRQ)VALUES(:RKRQ)');
Query1.Prepare;
Query1.ParamByName('rkrq').Value:=null;
Query1.ParamByName('rkrq').DataType:=ftDateTime;
Query1.ExecSql;

这样修改后所存进去的日期不是空,而是1899年12月31日,各位可有办法
让他存为空?
 
多人接受答案了。
 
后退
顶部