字段类型为image的数据从sql导入到access中,导入代码为:
with AccessQuery do
begin
  close;
  sql.clear;
  sql.add('insert into table1(id,zp) values(:id,:zp)');
  parameters[0].value := SqlQuery.fieldbyname('id').asinteger;
  if SqlQuery.fieldbyname('zp').is null then
  begin
    parameters[1].datatype := ftblob;
    parameters[1].value := null;
  end else
  begin
    m := TMemoryStream.create;
    TBlobField(SqlQuery.fieldbyname('zp')).SaveToStream(m);
    m.position := 0;
    parameters[1].LoadFromStream(m,ftBlob);
    m.free;
  end;
  ExecSQL;
end;再取access数据库中的数据zp已经不是null了,无论是用select * from table1 where isnull(zp),
还是用field.isnull,但field.datasize为0.百思不得其解,来坛发个贴问问高手们

解决方案 »

  1.   

    不同数据库有差异,默认设置、驱动程序中的参数、ADO/BDE的参数都有可能影响到的结果具体到你这个问题,先检查一下是不是Access中该字段不允许为NULL
    然后ADO/BDE判断到这一点,自动将NULL转成空串了
      

  2.   

    不是null 你update成null就成了
      

  3.   

    就想知道为什么会变成Not null
      

  4.   

    先确定SqlQuery.fieldbyname('zp')是不是null呀,如果sqlserver中就不是null,那你导入到access中依然不是null
      

  5.   

    我也遇到同样的问题,更换odbc驱动解决