使用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为空。
不是在Delphi侧控制。
注意红色代码,是在Access中用SQL语句直接导数据,从一个表导入到另一个表。
To:bdmh
难道不能直接用SQL导数据
TO:m617105
CDATE 没用啊。
在Access中直接执行如下语句
Insert into work(TicketNo,DrawTime) select 票号, cdate(出票时间) from temp
数据导进去了,其他列都正常,但DrawTime为空。
#6
#7
神啊,995
#8
其实自己写一个转换函数最能满足个性需要了
#9
Access帮助:
可以使用 IsDate 函数确定 date 是否可以转换为日期或时间。CDate 可识别日期文本和时间文本,以及处于可接受的日期范围内的某些数字。将数字转换为日期时,整数部分将被转换为日期。数字的任何小数部分都将被转换为一天中的时间(从午夜 12 点开始计算)。
CDate 将根据 系统的区域设置识别日期格式。如果采用可识别的日期设置之外的其他格式提供日期值,则可能无法确定正确的年、日、月顺序。此外,如果长日期格式中还包含星期字符串,也不能识别此格式。
是不是你的 出票时间的格式不对啊?
可以使用 IsDate 函数确定 date 是否可以转换为日期或时间。CDate 可识别日期文本和时间文本,以及处于可接受的日期范围内的某些数字。将数字转换为日期时,整数部分将被转换为日期。数字的任何小数部分都将被转换为一天中的时间(从午夜 12 点开始计算)。
CDate 将根据 系统的区域设置识别日期格式。如果采用可识别的日期设置之外的其他格式提供日期值,则可能无法确定正确的年、日、月顺序。此外,如果长日期格式中还包含星期字符串,也不能识别此格式。
是不是你的 出票时间的格式不对啊?
#10
#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为空。
不是在Delphi侧控制。
注意红色代码,是在Access中用SQL语句直接导数据,从一个表导入到另一个表。
To:bdmh
难道不能直接用SQL导数据
TO:m617105
CDATE 没用啊。
在Access中直接执行如下语句
Insert into work(TicketNo,DrawTime) select 票号, cdate(出票时间) from temp
数据导进去了,其他列都正常,但DrawTime为空。
#6
#7
神啊,995
#8
其实自己写一个转换函数最能满足个性需要了
#9
Access帮助:
可以使用 IsDate 函数确定 date 是否可以转换为日期或时间。CDate 可识别日期文本和时间文本,以及处于可接受的日期范围内的某些数字。将数字转换为日期时,整数部分将被转换为日期。数字的任何小数部分都将被转换为一天中的时间(从午夜 12 点开始计算)。
CDate 将根据 系统的区域设置识别日期格式。如果采用可识别的日期设置之外的其他格式提供日期值,则可能无法确定正确的年、日、月顺序。此外,如果长日期格式中还包含星期字符串,也不能识别此格式。
是不是你的 出票时间的格式不对啊?
可以使用 IsDate 函数确定 date 是否可以转换为日期或时间。CDate 可识别日期文本和时间文本,以及处于可接受的日期范围内的某些数字。将数字转换为日期时,整数部分将被转换为日期。数字的任何小数部分都将被转换为一天中的时间(从午夜 12 点开始计算)。
CDate 将根据 系统的区域设置识别日期格式。如果采用可识别的日期设置之外的其他格式提供日期值,则可能无法确定正确的年、日、月顺序。此外,如果长日期格式中还包含星期字符串,也不能识别此格式。
是不是你的 出票时间的格式不对啊?
#10
#11
在数据库中直接将'.0'去掉,就OK了。非常感谢你们