<font color=red>2001年以后的日期问题,你见过这么有趣的问题吗?我就见过。快进来看看吧!</font> (300分)

  • 主题发起人 主题发起人 程云
  • 开始时间 开始时间

程云

Unregistered / Unconfirmed
GUEST, unregistred user!
2001年以后的日期问题,你见过这么有趣的问题吗?我就见过。
看下面

在三层数据库中,
2001年1月2日,可提交到数据库中就成了2001年2月1日
2001年1月3日,可提交到数据库中就成了2001年3月1日
2001年1月4日,可提交到数据库中就成了2001年4月1日
以此类推,

2001年1月13日,可提交到数据库中就成了2001年1月13日
就不变了 :-( 帮着看看吧
2001年1月2日,可提交到数据库中就成了2001年2月1日
这是什么逻辑? :-)
嗨!
我是直接在删格中写日期的,
在用ClientDataSet1.ApplyUpdates(0);提交到数据库中
是三层数据库

这是在我的一个模块中出现的。面其它模块中没有,我对照了一天了,
也没发现哪儿不同,嗨!重新作了些模块,始终作不出原来哪不出这问题的情况。
此问题对2001年后有效。
各位老大,快快帮我看看吧。
 
鬼知道你的程序怎么写的?
最多看一下中间件是否没留神改掉了默认的DateFormat字符串 .
 
程兄叫我来看,可是我不懂数据库,只能说上一句可惜了.SORRY程兄.
 
还从没见过,
 
我在应用服务器中没写什么,
只有下面这段程序。
procedure Tbb.ADODataSet1AfterOpen(DataSet: TDataSet);
var
i: Integer;
begin
for i:=0 to ADODataSet1.FieldCount-1do
ADODataSet1.Fields.ProviderFlags:= [pfInUpdate];
ADODataSet1.FieldByName('ID').ProviderFlags:= [pfInWhere];
end;

这是用来从数据库中得到字段的定义的,这样写不没错吧
我在客户端写的更简单,
procedure TForm1.Button1Click(Sender: TObject);
begin
if ClientDataSet1.Active then
ClientDataSet1.Close;
ClientDataSet1.Open;
DataSource1.AutoEdit:=True;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ClientDataSet1.ApplyUpdates(0);
end;
这也不会有问题吧!
然后我直接在删格中改日期有2001以后的一天,如2001-01-11,
在提交后再查询就成了2001-11-01。
我到底哪儿作错了呢?你们帮我看看。
 
首先可以排除DELPHI本身的可能性, 因为DELPHI中所有处理的日期都是DOUBLE型
的, 绝对不可能将1月2日转成2月1日.
其次, 可以肯定是数据库本身, 或者与数据库连接环节中出现的问题, 因为一般写入数
据库的日期字段都是用字符串来完成的. 因此最大可能性是数据库与delphi中关于日
期格式定义不同造成了的问题, 请检查系统/数据库/BDE(ODBC)/数据库CLIENT等方
面日期格式定义是否一致.
 

我刚试了一下,实在没出现你说的问题,
最大的可能就是象eYes老大说的那样日期格式不匹配,
你明天自己写一个最简单的程序在同样的机器上和其他的机器上去试试看
如果两个结果不同的话,一定是配置的问题了
>>此问题对2001年后有效。
最奇怪的就在这里,用上面的不好解释
再看 :(

 
呵呵,确实古怪,真是长见识。各位老大继续! :)
 
如果日期为2001-01-31出现数据库存取错误,那么你的日期格式可能有错。
运行程序设置日期格式:
SetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SSHORTDATE, 'yyyy-MM-dd');
否则是其它原因也未可知。
 
当日期为2001-01-31时,存储是正确的,
我用是是ACCESS97的数据库,是定义为"一般日期"即代有时间的哪一种(我改为其它的也有这问题),
我是用的ADO中的Jet4引擎,
也作了个简单的例子,就是前面提到的哪个,可问题以旧,
但在两层数据库中没有问题,我看可能还是三层结构时对日期字段的传递有问题。
 
to 郭玉梁:
不是显示的问题,是数据库中就是这样存的,
但我也安你的试过了,问题没没变化。
一定是在三层提交的哪会出的错。
 
你为什么不用2001-04-08和2001-12-08和2001-04-13再试一次?
 
Access做三曾结构也不多见啊
 
to cropcoco:
你真想知道你说的这几个日期有什么变化吗?
2001-04-08会变为2004-08-01
2001-12-08会变为2012-08-01
2001-04-13就不会错了,
哈哈!你明白是怎么会事了吗?
我就想不通为何这样
 
古怪,确实很怪,虽说我不懂多少MIDAS的,但也先听听,难说我以后也会碰上这样的问题
 
新知识。
 
我感觉是日期时间的问题,
我要在的字段是日期时间形字段,
从三层过来后,在客户端就只有日期了,而我没出现这个问题的模块会显示时间,
但我想不出如何让这个字段在通过三层后还是日期时间形的。
我照着原来的作,也作不出,有人有这方面的经验吗?
 
这个问题真酷!
 
(1)试一下将中间层的短日期格式改为'YYYY-MM-DD'
(2)用QUERY语句提交,日期前用CONVERT(DATETIME,'2001-01-01')
 
to 朱晓强:
在中间层又如何改为'YYYY-MM-DD'?
我也用QUERY试过了。
而且CONVERT函数在ACCESS中不支持,我也已试过了
:-(
 
后退
顶部