发现delphi2009的一个好大的BUG,好烦人。关于null和''的。(200)

  • 主题发起人 主题发起人 vivadata1
  • 开始时间 开始时间
V

vivadata1

Unregistered / Unconfirmed
GUEST, unregistred user!
如果字段用了nvarchar类型,ClientDataSet相应于客户端的Field类型为TWideStringField. 如果客户端该字段不需要数据,赋值是''( as TWideStringField).asWideString:=''),保存到数据库会出现不能为null,晕死! TStringField不会出现这样的事情!
 
晕,我正准备将数据库中所有的varchar改成nvarchar呢.
 
那个数据库??晕,这也叫灌水??
 
数据库是SQL SERVER 2008.我发现,ClientDataSet对于nvarchar的处理同varchar处理差别太大了,简直是两回事.对于nvarchar简直是类似于BLOB字段类型进行处理了,而不是string字段类型. 差.虽然我有其它的方法可以处理,但牺牲了灵活性. 唉,我的多语言梦想破裂了.
 
检查你的对应的数据库字段,确保没有设置not null
 
第一:检查数据库字段看看有没有设置为非Null;第二:客户段如果为空的话,还是复制为( as TWideStringField).asWideString:=null试试;我发现Delphi2007下面 VarIsEmpty 是无效的函数,不能检测空值,他认为‘’和null不相等。
 
这是Midas的问题,它对于TWideStringField的空字符串,不会产生日志信息,所以保存不到数据库中,解决方法:if AsString = EmptyWideStr then AsString := 这里指定为Tab字符就行了
 
多人接受答案了。
 
后退
顶部