delphi操作与SQL二进制字段的问题(200分)

  • 主题发起人 主题发起人 farwend
  • 开始时间 开始时间
F

farwend

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手:
请指点一二,小弟感激不已,什么地方有误请各位不吝赐教!!!
我在编一个程序,用的是Delphi 6.0, sql server 7.0 ,win2000操作系统
数据库有一字段是image类型,想在其中存放的是word文档,使用的是BDE的database
与查询组件,当打开数据库表以后,如果直接取第一条记录image字段没有错,但是移动记录指针以
后取第二条或以后多条记录的iamge字段时会出错,请各位看下面的代码:
procedure TFrmDataBaseOLE.Button1Click(Sender: TObject);
var
ST:TStringStream;
blobStream:TBlobStream;
i:integer;
Query:TQuery;
begin
Query:=TQuery.Create(self);
Query.DatabaseName:=database1.DatabaseName;
Query.SQL.Add('select * from ole_word');
Query.Open;

//edit1.Text的值为第几条记录,当它大于时,表示要往后移动但同时错误也产生了!
i:=strtoint(edit1.Text)-1;
if i>0 then
begin
query.MoveBy(i);
end;

st:=TStringStream.Create('');
edit2.Text:=query.FieldValues['path'];
blobstream:=TBlobStream.Create(query.FieldByName('content') as TBlobField,bmread);
blobstream.Position:=0;
st.CopyFrom(blobstream,blobstream.Size);
st.Position:=0;
olecontainer1.DestroyObject;
olecontainer1.LoadFromStream(st);
query.Free;
st.Free;
blobstream.Free;
end;

end.
 
取blob和别的 数据的取法不同,不能直接取下一条,你试试用sql不用下一条来试试。
blob用stream来读取。
 
是不是BDE中blob size设置太小?试试改大点
 
不能用TStringStream类
最好用TStream
 
哪位大侠能给出具体可行的办法,只要调试通过,点数全部奉送,
这可是小弟的全部家当呀!!
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部