Access中导数据时,如何将文本型转化成日期时间型?

时间:2020-12-20 14:53:02
   大概的方案如下:
      使用Access数据库,先从Excel中将数据导入Access的Temp表,使用如下方法:
        SQL :=' Insert into Temp(票号,出票时间,入库人ID) select 票号,出票时间,入库人IDfrom [excel 8.0;database='+xlspath+'].[ImpTemp$]';
       DM_Main.ExecSql(SQL);
      Temp表各字段都是文本型,在这个表做好数据校验后,再将数据导入另一个工作表work。
      使用如下代码
       InsertSQL := 'Insert into work(TicketNo,DrawTime,ImPorterId) ';
      InsertSQL := InsertSQL + 'select 票号,出票时间,入库人ID from temp ';
      ExecSql(InsertSQL); 
      
   问题出现了,work表中的DrawTime字段是Date型,而Temp中的“出票时间”是文本型。
   提示“标准表达式中数据类型不匹配”。
   我将“出票时间”这个字段去掉时,就可以正常导入了。

关键问题在红色部分代码,如何处理转化的问题。
Temp中的“出票时间”字段的数据 是如“2011-02-14 00:04:18.0”这样的格式。

11 个解决方案

#1


strtodate(formatdatetime...

#2


類似這樣試試。。。

StrToDate(FormatDateTime('yyyy/mm/dd',qry_BaseTemp.FieldByName('lastdt').AsDateTime))

#3


对于不符合日期格式(包括本地日期格式),需要处理一下,不能直接转换

#4


用Access的CDate函数转化下就行了

InsertSQL := 'Insert into work(TicketNo,DrawTime,ImPorterId) ';
InsertSQL := InsertSQL + 'select 票号,CDate(出票时间),入库人ID from temp 

#5


TO:kye_jufei
    不是在Delphi侧控制。
    注意红色代码,是在Access中用SQL语句直接导数据,从一个表导入到另一个表。

To:bdmh
   难道不能直接用SQL导数据

TO:m617105
   CDATE 没用啊。
   在Access中直接执行如下语句
  Insert into work(TicketNo,DrawTime) select 票号, cdate(出票时间) from temp 
  数据导进去了,其他列都正常,但DrawTime为空。

#6


该回复于2011-04-09 08:48:41被版主删除

#7


神啊,995

#8


其实自己写一个转换函数最能满足个性需要了

#9


Access帮助:
可以使用 IsDate 函数确定 date 是否可以转换为日期或时间。CDate 可识别日期文本和时间文本,以及处于可接受的日期范围内的某些数字。将数字转换为日期时,整数部分将被转换为日期。数字的任何小数部分都将被转换为一天中的时间(从午夜 12 点开始计算)。
CDate 将根据 系统的区域设置识别日期格式。如果采用可识别的日期设置之外的其他格式提供日期值,则可能无法确定正确的年、日、月顺序。此外,如果长日期格式中还包含星期字符串,也不能识别此格式。
是不是你的 出票时间的格式不对啊?

#10


该回复于2011-04-11 08:36:50被版主删除

#11



在数据库中直接将'.0'去掉,就OK了。非常感谢你们

#1


strtodate(formatdatetime...

#2


類似這樣試試。。。

StrToDate(FormatDateTime('yyyy/mm/dd',qry_BaseTemp.FieldByName('lastdt').AsDateTime))

#3


对于不符合日期格式(包括本地日期格式),需要处理一下,不能直接转换

#4


用Access的CDate函数转化下就行了

InsertSQL := 'Insert into work(TicketNo,DrawTime,ImPorterId) ';
InsertSQL := InsertSQL + 'select 票号,CDate(出票时间),入库人ID from temp 

#5


TO:kye_jufei
    不是在Delphi侧控制。
    注意红色代码,是在Access中用SQL语句直接导数据,从一个表导入到另一个表。

To:bdmh
   难道不能直接用SQL导数据

TO:m617105
   CDATE 没用啊。
   在Access中直接执行如下语句
  Insert into work(TicketNo,DrawTime) select 票号, cdate(出票时间) from temp 
  数据导进去了,其他列都正常,但DrawTime为空。

#6


该回复于2011-04-09 08:48:41被版主删除

#7


神啊,995

#8


其实自己写一个转换函数最能满足个性需要了

#9


Access帮助:
可以使用 IsDate 函数确定 date 是否可以转换为日期或时间。CDate 可识别日期文本和时间文本,以及处于可接受的日期范围内的某些数字。将数字转换为日期时,整数部分将被转换为日期。数字的任何小数部分都将被转换为一天中的时间(从午夜 12 点开始计算)。
CDate 将根据 系统的区域设置识别日期格式。如果采用可识别的日期设置之外的其他格式提供日期值,则可能无法确定正确的年、日、月顺序。此外,如果长日期格式中还包含星期字符串,也不能识别此格式。
是不是你的 出票时间的格式不对啊?

#10


该回复于2011-04-11 08:36:50被版主删除

#11



在数据库中直接将'.0'去掉,就OK了。非常感谢你们