新鲜、有趣,互联生活。令狐葱。

2006/10/23

标准表达式中数据类型不匹配:Access时间格式问题

 
在BCB中使用ADOTable的Filter,正确的使用方法是:
ADOTable1->Filtered = false;
ADOTable1->Filter = "datetime>='2005-1-1 12:00:00' and datetime<='2006-1-1 12:00:00'";
ADOTable1->Filtered = true;

或者可以使用SetRangeStart 达到特定效果:
ADOTable1->SetRangeStart();
ADOTable1->FiekdByName("datetime")=TDateTime("2005-1-1 12:00:00");
ADOTable1->SetRangeEnd();
ADOTable1->FiekdByName("datetime")=TDateTime("2006-1-1 12:00:00");
ADOTable1->ApplyRange();
 
但是,今天我在使用Filter的时候出现一个问题,在选择了filter 中的一个日期后发现有的时候有查询结果,有的时候没有查询结果,但是在数据库中可以清晰地看到数据。我的数据库是ACCESS,filter 的选择条件是:
Table_Syn->Filter = "syntime = '" + strTime + "'";(时间、字符串等要加"'"(单引号))
 
后来我直接在查询分析器中执行sql语句:
Select syntime From 信息表  where syntime='2006-10-23 14:54:53'
出现错误:
[Microsoft][ODBC Microsoft Access Driver] 标准表达式中数据类型不匹配。
 
看起来只能是数据库的日期格式的问题了,翻来覆去整了一整天,终于解决了问题:
一般出现这个错误都是因为程序里面的数据类型和数据库字段的数据类型不一致造成的。
问题代码:
TDateTime CurrentTime = TDateTime::CurrentDateTime();
Table_Syn->FieldByName("syntime")->Value = CurrentTime ;
解决后:
TDateTime CurrentTime = TDateTime::CurrentDateTime();
Table_Syn->FieldByName("syntime")->Value = FormatDateTime("YYYY-MM-DD hh:mm:ss", CurrentTime);
 
唉,Access数据库真不是个好东西,早知道我直接用字符串了:〉

 

1 条评论:

匿名 说...

我也碰到相似的问题,有参考价值,谢谢了