是一个导出WORD的代码,在导出时,导出一部份时就出现了以下错误.是不是数据转换时失败的原因,请问如何改?出现错误:Invalid variant type conversion导出关健代码如下: with DBGrid1.DataSource.DataSet do
   while not eof do
begin
 for j:=1 to DBGrid1.Columns.Count do
 if DBGrid1.Columns[j-1].Field.Value<>Null then
 if DBGrid1.Columns[j-1].Field.Value<>'' then
 if Length(DBGrid1.Columns[j-1].Field.Value)<>0 then
 Doc.Tables.Item(1).Cell(i,j).Range.InsertAfter(DBGrid1.Columns[j-1].Field.Value);
 Next;

解决方案 »

  1.   

    如果用variant时,最好进行一下转换,不要直接比较
    if DBGrid1.Columns[j-1].Field.Value<>Null then改成
    if not varisnull(DBGrid1.Columns[j-1].Field.Value) then
    其他的类似
      

  2.   

    回楼上,还是一样的结果啊
    出现错误:Invalid variant type conversion高手帮帮忙,谢了.
      

  3.   

    1.NULL判断应该用VarIsNull函数.2.你的代码使用了Length函数, DBGrid1.Columns[j-1]应该是字符串类型.你的选择条件有问题:      if DBGrid1.Columns[j-1].Field.Value<>'' then
     if Length(DBGrid1.Columns[j-1].Field.Value)<>0 then  字符串长度不为零当然也就非空.    with DBGrid1.DataSource.DataSet do
        while not eof do
        begin
          for j := 1 to DBGrid1.Columns.Count do
            if (not VarIsNull(DBGrid1.Columns[j - 1].Field.Value)) and
              (Length(DBGrid1.Columns[j - 1].Field.AsString) <> 0)
              then
              Doc.Tables.Item(1).Cell(i, j).Range.InsertAfter(DBGrid1.Columns[j - 1].Field.Value);
          Next;
      

  4.   

    if DBGrid1.Columns[j-1].Field.Value<>'' then
    改为 DBGrid1.Columns[j-1].Field.asstring<>''if Length(DBGrid1.Columns[j-1].Field.Value)<>0 then
    改为
    if Length(DBGrid1.Columns[j-1].Field.asstring)<>0 then
    试试