求救::(数据库的存储与读取)(140分)

  • 主题发起人 主题发起人 子瑜
  • 开始时间 开始时间

子瑜

Unregistered / Unconfirmed
GUEST, unregistred user!
[?]我有一个Access数据库建的表中有一个OLE对象的字段,在用Delphi的SQL Explorer看时为LongVarBinary字段,
此字段中存有很多数据,我是直接读出:
Var
ansistr:AnsiString;
begin
...
ansistr:=FieldValues['TemperatureSet']; //TemperatureSet为LongVarBinary字段
...
end;
读出后值ansistr为以下的我看不懂乱东西:
ansistr:= ''T'#1'N'#1'1'#1#$16#1#7#1#$A#1#$E#1#$17#1#$11#1#$F#1'M'#1'P'#1'$'#1#
$F4#0#$E0#0#$F8#0#$11#1#$1B#1#$13#1#$D#1'I'#1'U'#1#$1A#1#$DE#0#$B7#0#$B9#0#$B6
#0#$B8#0#$B7#0#$BD#0'M'#1'U'#1'$'#1#$D3#0#$99#0'v'#0'k'#0'x'#0#$92#0#$A1#0'N'#1
'G'#1#$16#1#$C5#0's'#0'['#0'R'#0'_'#0'i'#0's'#0'M'#1'C'#1#$14#1#$C3#0'l'#0'W'#0
'R'#0'^'#0'n'#0'o'#0';
请问
1,怎样读是正确的或者对以上结果经过怎样的处理才能得到我原来存时的真实数据。
2,能解释一下这个字段的存储原理。
3,如何正确把数据存到此LongVarBinary字段(或OLE对象的字段)中去。
谢谢!再谢谢!
 
看不懂应该不是问题。
如果知道该字段保存的对象的类型,可以用相关的控件和它关联。
这样会正确显示。
如果要直接读取,可以使用流对象进行操作,如 TMemory
 
你这样当然不行,如果不知道什么类型,使用ole来读.如果是图片,当然是dbimage了,
 
同意楼上说的。
另外,你所被赋值的变量类型应视 FieldValues['TemperatureSet']的类型
而定。如果不知道类型,先应进行判断。还有widestring 类型的变量,
会初始化为一系列随机的字符串。不管你赋给它的变量值的大小,所以
你需要加入一结尾符'/0'.或者用函数strpas /strpcopy 进行转换。

在一些数据库,你所说的那种数据类型,统一归类为 blob数据。
这是一中抽象类型的数据。
所以你在保存数据到表时,需要将字段的类型强制转换为Tblob
即 Tblob(fields[o]).value :=你的数据;

 
谢谢各位!
特别谢谢pcc_mmz1,他说的跟我想知道的有一点点接近!
我是直接向数据字段中加数据的,
我以前存数据时是这样存的:
Var
ansistr:ansistring;
datasize:integer;
Abyte:array of byte;
begin
...
with adotable1 do
begin
...
Abyte:={由串口接收的字节数组};
datasize:=High(Abyte)+1;
close;
Fieldbyname('temperatureset').Size:=datasize;
open;
append;
Fieldbyname('TemperatureSet').Value:= Abyte;
post;
close;
...
end;
还有,那为仁兄有兴趣的话,我可以发一部分数据给他,我真的又急又困惑。
谢谢!再谢谢!
 
[red][/red]还有,我准备把以前我在别处的问题分200加在这些问题上!
 
这几天在线等待大师指教.......
 
你应该用Bolb字段读取:
[?]我有一个Access数据库建的表中有一个OLE对象的字段,在用Delphi的SQL Explorer看时为LongVarBinary字段,
此字段中存有很多数据,我是直接读出:
Var
ansistr:AnsiString;
begin
...
ansistr:=TBlobField(DataSet.FieldByName('BITMAP')).AsString; ...
end;
 
后退
顶部