DELPHI2007的大BUG! nvarchar 零长度字符更新 BUG.

jinvqing 2008-05-03 09:36:21
DELPHI2007(sp3)+MSSQL SERVER 2000
建立一表 MSSQL 表:
A NVARCHAR(50)
B NVARCHAR(50)

填入数据
'aaaaa',''
注意: B值必须为零长度的字符串.即非<NULL>值,也即输入任意字符后删除所有字符产生的值.

然后建好
SQLConnection1: TSQLConnection;
m: TSimpleDataSet;

建立事件:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
m.Edit;
m.FieldByName('A').AsVariant:='BBBBB';
m.ApplyUpdates(-1);
end;

如果此值是
'aaaaa',<NULL>
则更新成功.

参考出错的TSQLMonitor指令:
update "TABLE3" set
"HandleMan" = ?
where
"HandleMan" = ? and
"Test" is null

最后一行不应该是
"Test" is null
应该是
"Test" = ''


很简单的程序,更新会出错.
有没有补丁可解决?
...全文
195 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
深宇 2008-05-21
  • 打赏
  • 举报
回复
个人建议还是不要使用DBX,还是采用ADO比较成熟稳定
jinvqing 2008-05-20
  • 打赏
  • 举报
回复
我不是读取此变量,是在B变量为''(连括号都没有的空字符),时修改A变量,使用APPLYUPDATES保存修改就出错.
是在B变量为<Null>(另一种空字符),时修改A变量,使用APPLYUPDATES保存修改就保存成功.


jinvqing 2008-05-20
  • 打赏
  • 举报
回复
还有一个要提醒的是,在输入数据时,请使用 sqm server enterprise manger输入数据.
如果使用DELPHI2007输入数据,则是能更新成功的.
边缘998 2008-05-19
  • 打赏
  • 举报
回复
我不认为是DELPHI问题,我之前试过这样一个东西.当我插入的数据字段不赋值,默认为空时,我分另用fieldbyname().value和fieldbyname().asstring来读取这个空字段,你猜怎么着,用Value就会出错,而用asstring它就会把NULL转为''再输出.所我你取出来的时候进行转换一下试试.
僵哥 2008-05-19
  • 打赏
  • 举报
回复
个人建议楼主多学习一些数据库的基础知识(理论)。
jinvqing 2008-05-19
  • 打赏
  • 举报
回复
问题可能出在 单元unit 'SqlExpr'第1720行的函数内.
僵哥 2008-05-19
  • 打赏
  • 举报
回复
NULL不可以直接人为的“自作聪明”改为''
jinvqing 2008-05-19
  • 打赏
  • 举报
回复
数据表中已存在大量的数据,还需解决将大量<Null>数据改为''.这个方法只能算是一个临时的解决方法.
如果能够直接修改其编译内核的文件,应该可以解决.
DELPHI 2007将''看成了<Null>,因此,编译器的自动翻译的更新指令错了,TSQLMonitor监测的这条更新指令应该是
update "TABLE3" set
"A" = ?
where
"A" = ? and
"B" = ?

僵哥 2008-05-19
  • 打赏
  • 举报
回复
建议使用:m.FieldByName('B').AsVariant:= WideString('');
僵哥 2008-05-19
  • 打赏
  • 举报
回复
在数据库当中设置字段为Not Null,并且设置Default值为(''),要不就对B赋值:m.FieldByName('B').AsString := '';
genispan 2008-05-03
  • 打赏
  • 举报
回复
我也觉得是数据库字段类型设置问题
oushengfen 2008-05-03
  • 打赏
  • 举报
回复
这应该跟Delphi无关,即然一个字段不赋值也是可以通过,是不是你的数据库B字段是not null或主键啊

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧