大概的方案如下:
      使用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”这样的格式。

解决方案 »

  1.   

    類似這樣試試StrToDate(FormatDateTime('yyyy/mm/dd',qry_BaseTemp.FieldByName('lastdt').AsDateTime))
      

  2.   

    用Access的CDate函数转化下就行了InsertSQL := 'Insert into work(TicketNo,DrawTime,ImPorterId) ';
    InsertSQL := InsertSQL + 'select 票号,CDate(出票时间),入库人ID from temp 
      

  3.   

    TO:kye_jufei
        不是在Delphi侧控制。
        注意红色代码,是在Access中用SQL语句直接导数据,从一个表导入到另一个表。To:bdmh
       难道不能直接用SQL导数据TO:m617105
       CDATE 没用啊。
       在Access中直接执行如下语句
      Insert into work(TicketNo,DrawTime) select 票号, cdate(出票时间) from temp 
      数据导进去了,其他列都正常,但DrawTime为空。
      

  4.   

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