设为首页 加入收藏

TOP

VC与Access时间数据交互修正方法(二)
2012-11-04 15:17:32 来源: 作者: 【 】 浏览:451
Tags:Access 时间 数据 交互 修正 方法


  时间问题的修正

  现在,我们以一个实际的某舰船之间通讯的数据库为例,说明如何在应用中克服这个问题。在这个程序中,我们比较了数字类型变量与日期/时间类型变量在VC++(www.cppentry.com)和Access数据交换时的区别,并对时间类型变量存在的问题提出了相应的解决方法。

  本程序需要同时实现这样两个功能:

  (1)查找的时间范围:一天内给定时间前后T分钟,共计前后N天;

  (2)查找的位置范围:以给定A地为中心R为半径范围内的所有点作为A点,和以给定B地为中心R为半径范围内的所有点作为B点,且两点关联(是通信的双方)。

  本例所涉及的框图如图1所示:


图1 按时间查找对话框

  各编辑控件对应的变量分别为:m_Date,m_Time,m_ Longitude_A,m_Longitude_B,m_Latitude_A,m_Latitude_B,m_DD,m_MM,m_Rad。

  所涉及的CPP源程序如下:

m_Date1=m_Date;
m_Date2=m_Date;
m_Date1-=m_DD*86400; //每一天是86400秒
m_Date2+=m_DD*86400;
m_Time1 = m_Time;
m_Time2 = m_Time;
m_Time1-=m_MM*60; //每分钟为60秒
m_Time2+=m_MM*60;
//用SQL语句进行查找,注意对时间字段的处理
sqlstr.Format("(((年月日)>#%d/%d/%d# AND (年月日)<#%d/%d/%d#) AND\
 ((时分)>#1/1/70 %d:%d:%d# AND (时分)<#1/1/70 %d:%d:%d#) AND\
 (A点经度)<%f AND (A点经度)>%f AND (A点纬度)<%f AND\
 (A点纬度)>%f AND (B点经度)<%f AND (B点经度)>%f AND\
 (B点纬度)<%f AND (B点纬度)>%f)",
m_Date1.GetMonth(),m_Date1.GetDay(),m_Date1.GetYear(),
m_Date2.GetMonth(),m_Date2.GetDay(),m_Date2.GetYear(),
m_Time1.GetHour(),m_Time1.GetMinute(),m_Time1.GetSecond(),
m_Time2.GetHour(),m_Time2.GetMinute(),m_Time2.GetSecond(),
m_Longitude_A+m_Rad,m_Longitude_A-m_Rad,m_Latitude_A+m_Rad,
m_Latitude_A-m_Rad,m_Longitude_B+m_Rad,m_Longitude_B-m_Rad,
m_Latitude_B+m_Rad,m_Latitude_B-m_Rad);

m_SmartSet.m_strFilter=sqlstr;
m_SmartSet.m_strSort="分值 DESC"; //降序排列

  在程序的SQL语句中,我们为每一个时间字段的查找人为地加上70年1月1日(即70/1/1),而对于数字类型变量的查找用标准的SQL语句就可以了。为什么要加上70/1/1呢?因为正如前所述,在主界面中,当我们添加一条记录的时候,VC自动为记录的时间字段添加的日期是70/1/1。这样,在SQL语句中在时间字段人为地插入日期不但克服了VC存在的时间问题,而且对其它字段的查找没有任何影响,这种解决方案经编程(www.cppentry.com)实验证明是完全正确且可行的。

  最后用ClistBox类的AddString()等成员函数,就可以把所查到的记录在列表框中一一显示出来,查找的记录如图2所示,这里我们仅在列表框中显示了几条模拟的记录。图2中的排序是按照分值的大小降序排列的。


图2 查找记录结果

  结束语

  本文提供了一种简便实用的方法,修正了VC++(www.cppentry.com)与Access数据库日期/时间类型变量数据交换存在的问题。应用VC++(www.cppentry.com)与其它数据库链接的时候可以采用类似的思想。
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇VC++中调用ADO的常用方法 下一篇VC中用内存映射文件处理大文件

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: