Excel表格数据导入SQL2005,其中数据库的一个字段是 “datetime”,可以为‘NULL’该字段对应Excel表的值可能为空。我的代码:
CSRQ :TdateTime;CSRQ := strtodatetime(Trim(excelWorksheet1.Cells.Item[i,6])); 当为空时报错;
改成
if Trim(excelWorksheet1.Cells.Item[i,6]) <> '' then
begin
  CSRQ := strtodatetime(Trim(excelWorksheet1.Cells.Item[i,6]));
end
else
begin
  CSRQ := NULL;
end;
当为空时也会报错:
Could not convert variant of type(NULL) into type (Double)请问各位,我该怎么处理 Excel时间为空?先谢谢!呵呵

解决方案 »

  1.   

    我之间遇到过这种问题,不过是在用ORACLE的时候遇到的。
      

  2.   

    VarToStr(excelWorksheet1.Cells[i,6])
      

  3.   

    可以用value来直接转换,如下代码示例:
    for j:=4 to fields.count-1 do
        fields[j].value := ExcelID.Cells[4+i,j-2].Value;
      

  4.   

    经过测试,楼主可以不用自己将字符串转化成datetime类型,将这个工作交给数据库来做,只要你的时间格式满足数据库的要求就行。以下是提交为空数据的方法:
    如果你是用adoquery或者clientdataset提交的,请用ADOQuery1.FieldByName('date_time').AsString:='';
    如果你使用sql语句提交的,请用insert into testsql(date_time) values (null)以上都是d7和sql2000下测试可用
      

  5.   

    把CSRQ := NULL;
    改为CSRQ.Clear;
    试下。
      

  6.   

    把CSRQ := NULL;
    改为CSRQ.Clear;
    试下。
      

  7.   

    我们习惯的写法:
    if Trim(excelWorksheet1.Cells.Item[i,6]) <> '' then
    begin
      ADOQuery1.FieldValues['csrq'] := Trim(excelWorksheet1.Cells.Item[i,6]);
    end
    else
    begin
      ADOQuery1.FieldValues['csrq'] := Null;
    end;
      

  8.   

    楼主出错的地方在于这句if Trim(excelWorksheet1.Cells.Item[i,6]) <> '' then
    begin
      CSRQ := strtodatetime(Trim(excelWorksheet1.Cells.Item[i,6]));
    end
    else
      ……楼主的本意是 判定Excel单元格是否为空,但,在Excel中Cell的value是variant类型,如果中间没有值时,是null,只有在用户显示的给cell赋空字符串时,其类型才是string,值value才是''所以 你的判定应该写成 
    if not VarIsNull(excelWorksheet1.Cells.Item[i,6]) then
    ……顺便指出,你提到的系统错误是由于将值为Null的Variant变量尝试转变为TDate(日期类型是使用双精度浮点数保存的)报出的
      

  9.   

    if not VarIsNull(excelWorksheet1.Cells.Item[i,6]) then
      CSRQ := strtodatetime(Trim(excelWorksheet1.Cells.Item[i,6]));