SQL Server的Text字段更新问题(100分)

C

Cobra

Unregistered / Unconfirmed
GUEST, unregistred user!
SQL Server 2000 ,Delphi5,BDE
用TQuery Update一个Text类型字段
文本中的分号已经处理过。
做参数传也不行,直接拼串也不行,总报错。
文本也不大,才8k,BDE blob size 也改过,没用。

错误信息:
Project XXX.exe raised exception class EDBEngineError with message 'Key violation.
[Microsoft][ODBC SQL Server Driver][SQL Server]SQL Server 内部错误。文本管理器无法继续执行当前
语句。'.Process stopped. Use Step or Run to continue.
 
表中要有一个主键,update才会起作用
 
当然有主键啦!
 
主键重复,与text 无关
 
主键重复了!
 
是亚,主见重复
 
不可能!是update语句,怎么会主键重复
我后来又试过,如果文本里全是中文就一点问题都没有
一旦有ascii字符,就有可能出问题,有时候又没事
真是搞不懂
 
你把代码贴出来让大家看看。
 
其中C_QuotFilter功能是检查宽字符串中如果有分号就用两个分号代替。
再在字符串头和尾各加一个分号。肯定没有问题,我试过没有分号的也存不进去。

function TNodeDlg.U_Save(PK:Integer):Boolean;
var
SqlStr,Content:WideString;
Query:TQuery;
begin
Content := Memo1.Text;
SqlStr := ' Update SI_Text set Content='+C_QuotFilter(Content)+' where NodeID='+IntToStr(PK)
Query := TQuery.Create(Nil);
Query.DatabaseName := DB.DatabaseName;
try
With Query Do
Begin
Close;
Sql.Clear;
Sql.Add(SqlStr);
Try
ExecSql;
Result := true;
except
Result := false;
end;
End;
finally
Query.Free;
Query := Nil;
end;
end;
 
我用的win2000有关系吗?
 
我刚才试了ADO也不行,出错信息是这个

project project1.exe raised exception class EOleException with message 'SQL Server 内部错误。文本管
理器无法继续执行当前语句。'. process stopped. Use Step or Run to continue.
 
来个例子吧:
表结构:
CREATE TABLE SI_Text(
NodeID int
primary key clustered,
Content Text Null,
)

文本:
中华人民共和国中华人民共和国中华人民共和国中华人民共和国
中华人民共和国中华人民共和国中华人民J共和国中华人民共和国


上面两行文本第一行复制167行再加上第二行,每行都有回车


 
疯了疯了(倒地身亡,吐白沫中...)

不是Delphi的事,直接在sql查询分析器里执行都不行。难道是sql server2000的bug?
我这是正版的呀。

谁有兴趣,给我邮箱,我发段Sql大家分析分析
我的joydragon@sina.com
 
俺看看。
 
SqlStr := ' Update SI_Text set Content='+C_QuotFilter(Content)+' where NodeID='+IntToStr(PK)

错啦,你考虑了数据中[ '] ,但没有考虑sql中的使用
应该:
'...set Content='''+C_QuotFilter(Content)+''' where .....'
 
feizi说对了。你就是这个错误。
 
晕, 想哪去啦
Key violation
显然是主键重复, 不关sql, ado, ...的事。
是你的表中原来的记录就存在主键重复的记录了。 这是不管你是插入还是修改都不成功
 
feizi,我已经在那个函数里处理了你说的问题,在头和尾加了[']

Pearl,我已经确定是SQL Server 2000的 bug了,
因为我在查询分析器里直接执行一个update语句,都出问题,
更新同一个主键的数据,换一个字符串就不出问题了。
错误信息是这样的:

服务器: 消息 7102,级别 20,状态 1,行 1
SQL Server 内部错误。文本管理器无法继续执行当前语句。
连接中断

上回错误信息里的主键重复是SqlServer自己内部出错乱报的,和主键没关系
我在下载sql server 2000的补丁,不知道管不管用
 
Cobra :哦,你更新是什么数据,把你的例子列出来看看
 
顶部