关于编程中写入当前日期的问题(19分)

  • 主题发起人 主题发起人 ntjrr
  • 开始时间 开始时间
N

ntjrr

Unregistered / Unconfirmed
GUEST, unregistred user!
不知道大家在编程时写入当前日期在格式上是如何处理的,我现在的处理方法是直接等于date(),不考虑格式,用户的系统是yyyy-m-d的默认格式也好,是yy.mm.dd,yyyy/m/d之类的其它格式也好,反正我就是录入他的系统的日期和格式,但在查询时我都是用的特定的形式,ado.Parameters.ParamByName('Date1').Value := formatdatetime('yy-m-d',DateTimePicker1.Date);经过自己的测试和用户的实践,也未发现任何错误,录入和查询都能正确执行到所有的记录。
在此特咨询一下理论上应该采取何种方式最稳定而不出错?
 
稳定的方式,当然是在录入数据库的时候,作一下格式控制,在输出时,作为日期型或字符串型都可以正常显示。
 
我试过在录入时把日期格式化一下,但打开数据库看时(ACCESS)所存的日期并非是格式化后的,而是跟系统的格式变化的,系统的日期格式是什么样子,数据库中的数据格式就是什么样子,和录入时的格式不相关
 
date() 就是一个 Double 类型数据,没有格式问题。仅当数据转换(字符串->日期、时间)及显示时须考虑格式。
 
你可以在ACCESS把日期类型定义为字符串型,在输入的时候就格式化,输出的时候在进行转化就行了,安全稳定。
 
如果采用的是SQLserver或者oracle數據庫
最好取服務器的系統時間。而且以固定的根式存入,查詢時也采用這個格式。
當用戶很多時,很難保證客戶端的時間都是對的而是格式一致。
 
在查询时好象用ado.Parameters.ParamByName('Date1').Value := formatdatetime('yyyy-m-d',DateTimePicker1.Date),不管录入时日期是什么格式都能查到,这个观点是否正确?
 
回楼上,这个观点不正确,如果你存入数据库的格式不是'yyyy-m-d',那么查询的结果不会是你想要的结果。
 
应该能够自动转换吧~~~,我一般不使用parambyname 的方式,而是
ado.sql.add(' and the_date =''' + formatdatetime(yyyy-m-d',dtp1.date) + '''');
不知道可否,现在还没有出错.
 
回PING-Delphi,我写入时是直接等于DATE,或者等于strtodate(label.caption),而这个label.caption值也是直接等于datetostr而来的,也就是说写入时未做格式化。我试了好多种系统格式下写入,查询时都是正确的。能否再深入探讨一下您说的情况?
回bsense,我用了参数,错误也没有发现,格式也能兼容,和您的情况一致。
 
to ntjrr:
不好意思,之前可能误解你说的意思了。
我试了一下,bsense的方法是可以的,至于你说的那种方法,虽然不能肯定一定都正确,但是至少现在还没查出什么错误。
我也在学习delphi中,还请多指教。
 
多人接受答案了。
 
后退
顶部