记录存储时发生的错误(70分)

  • 主题发起人 主题发起人 kmgyl
  • 开始时间 开始时间
K

kmgyl

Unregistered / Unconfirmed
GUEST, unregistred user!
我要把一个记录存储到数据库的blob字段中时出现错误.

定义记录
Tabc =record
bb: array[0..4]of char;
aa:double;
end;
pabc=^tabc;

存储记录
procedure TForm1.Button1Click(Sender: TObject);
var
ttt:Tstream;
cc:array[0..10]of Tabc;
pcc:Pabc;
begin
cc[0].bb:='1234';
cc[0].aa:=12.34;
cc[1].bb:='9876';
cc[1].aa:=98.76;
pcc:=@cc;
table1.active:=true;
table1.edit;
table1.Appendrecord(['3123',nil]);
table1.Edit;
ttt:=table1.CreateBlobStream(tblobfield(table1.fieldbyname('info')),bmwrite);
ttt.Write(pcc^,sizeof(tabc)*2);
table1.Post;
end;
检查数据库发现存储的记录内容只有
'1234', 后面的数据没有了.
当cc[0].bb='12345',cc[1].bb:='98765'时
数据库存储了所有的数据
我发现只要 bb中有0x00时忽略以后的其他数据.
大家帮我看看是不是这样,该如何解决..
谢谢了



 
看样子是应该写上了不过显示时是按字符串方式显示0后的显示不出来。
 
我用winhex看过备注字段的内容,确实没有存入.
 
0x00是PChar的结束标志.
cc一开始时全是0x00,可以把它全填成空格,FillChar(cc,sizeof(cc),' ');
 
tstream的write函数中不是有size的参数吗?
难道size参数不起作用???
或者是否应该用其他的函数 我的数据中可能含有0x00这个字符时难道就不能存了吗?
例'abcd[0x00]efg'???
 
附加功能 将问题提前
 
kmgyl:如果还想接着讨论请定期提前自己的帖子,如果不想继续讨论请结束帖子。
 
kmgyl:如果还想接着讨论请定期提前自己的帖子,如果不想继续讨论请结束帖子。

 
多人接受答案了。
 
后退
顶部