环境,win2000,sql2000,delphi 5.0,前台是用缓存方式更新数据库的   前台执行的语句
update OpnBalane
set
  FiscaYear = '2002',
  AccoPerod = 4,
  WrhsCode = '02',
  LocCode = '0202',
  ItemCode = '57-1217**05',
  OpnBalane = 134.0,
  OnhandQty = 164.0,
  IssueQty = 0.0,
  RecivQty = 30.0,
  AdjustQty = 0.0,
  OpnBalanF = 0.0,
  OnhandFud = 0.0,
  IssueFud = 0.0,
  RecivFud = 0.0,
  AdjustFud = 0.0,
  AvailQty = 164.0,
  Operator = 'pdj',
  LotNUmber = NULL,
  Attribute = NULL
where
  AccoPerod = 4 and
  WrhsCode = '02' and
  LocCode = '0202' and
  ItemCode = '57-1217**05' and
  Attribute = NULL能够修改数据库值,而相同的语句在SQL分析器却不能更新数据。
原因主要在  ‘Attribute = NULL’条件中,只是为什么delphi中没错???看不明白了。

解决方案 »

  1.   

    Where 后的条件Attribute = NULL有问题。
    在后台的Where后的语句要用 Attribute is Null这是sql Server的问题与delphi无关。
      

  2.   

    我明白在SQL 里判null值比较特殊,但为什么相同的语句执行是不同,delphi最后也是将语句提提交给SQL执行啊。我是用缓存方式更新数据的,Attribute 的值并不是每次都是空值,只是在空值是前台和后台执行不一致。
      

  3.   

    感觉上delphi将语句提交给SQL执行之前自己做过一定的分析处理。你有没有注意到另外的现象:int型字段,其值为null,在DELPHI中得到0,在SQL分析器中得到null你可以将where 改为 isNull(Attribute,'') = '' 试一试
      

  4.   

    已经搞清楚了,是分析器中参数设置,默认是=null的条件是打不到东西的,只要修改一下就可以了。是在连接属性中,‘设置ansi_nulls’参数不选就可以了,默认已选择。