我保存数据时为什么总是显示"键列信息不足或不正确,更新影响到更多的行"?>??

ItOldHorse 2003-08-21 01:45:38
procedure .... //保存JPG文件到SQL数据库中

var
MemSize: Integer;
Buffer: PChar;
MyFile: TFileStream;
Stream: TBlobStream;
filename:string;
begin

if OpenDialog1.Execute then
begin
filename:=OpenDialog1.FileName;
MyFile:=TFileStream.Create(fileName,fmOpenRead);
with table1 do
begin
Open;
edit;
Stream := TBlobStream.Create(FieldByName('Doc') as TBlobField, bmWrite);{‘Doc’为BLOB字段名}
MemSize := MyFile.Size;
Inc(MemSize);
//增加的一字节给结尾的null
Buffer := AllocMem(MemSize);
try
Stream.Seek(0, soFromBeginning);
//流指针位置放到最前
MyFile.Read(Buffer^,MemSize);
Stream.Write(Buffer^,MemSize);
FieldByName('Name').Asstring:=ExtractFileName(fileName);
FieldByName('Size').Asstring:=inttostr(MemSize-1);
statictext1.caption:='文件名:'+ExtractFileName(fileName);
statictext2.caption:='文件大小:'+inttostr(Memsize-1)+'字节';
finally
MyFile.Free;
Stream.Free;
end;
try
table1.Post;
except
showmessage('保存失败!');
halt;
end;
showmessage('保存成功,正在加载文档!');
end;
end;
end;

执行出错!

键列信息不足或不正确,更新影响到更多的行
...全文
65 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxpbuaa 2003-08-21
  • 打赏
  • 举报
回复
错误可能在于主键的问题,比如没有主键等。不过的存流代码可以简化:
try
Stream.CopyForm(MyFile, 0); 即可
其他的什么缓冲区等都可以不要了


————————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————
qiume 2003-08-21
  • 打赏
  • 举报
回复
应该是记录的关键值在表里面不是唯一的,更新当然就影响多行了
hp0773 2003-08-21
  • 打赏
  • 举报
回复
根据需要尽量给表建立主键。
qiume 2003-08-21
  • 打赏
  • 举报
回复
表的关键字不唯一

5,388

社区成员

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

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