这个问题太难了。(在线等待)(100分)

S

sjhua

Unregistered / Unconfirmed
GUEST, unregistred user!
我想从db2的数据库中的blob字段中提取出已经存储了多媒体,可是现在我想把它通过
query控件提出来观看,我用流来解决,可是它总是随着bde的blobsize的大小变化而变化,
但delphi的bde最大只支持1m,请问高手我怎样才能用query来实现大于1m的blob字段。(在线等待)
 
难道没人能解决吗?
 
用ADO可以吗?
 
由于以前的代码都是由query写的如果换控件代码改动太大,没办法客户变需求。难道用query不能做到吗
 
增大cachesize怎么样
 
我试过,不行
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=481730
 
还是不行,你把bde配的那么大,虽然你的机子可以运行但是到了用户那里会出问题的,
而且,他是固定的再大下去的话还是没办法,我想问为什么往数据库里进的时候可以,而出来
的时候就不能用query出来哪?
 
先将blob中的内容读出,保存为临时文件,再用流处理的方法播放.要注意bde的网络连接时间
[:D]
 
使用ADO试试
 
增加一个TDataBase控件来连接数据库,在Database控件的Params属性中加入Blob size=2048;(以K为单位)
然后把Query的DataBaseName设为DataBase控件的DataBaseName属性.
 
to:aizb
按你的方法去做的话,最大也就2m多,我想一首mp3也不止2m多吧。
to alkz:
我在保存为临时文件的时候,文件的大小就不对,他跟你设定的blob size
大小一致。
 
我在用ado的时候,(数据库db2)代码如下:请问有什么不对吗?
procedure TForm1.Button1Click(Sender: TObject);
var
temp:TStream;
begin
ADOConnection1.Connected:=true;
with ADOquery1 do
begin
close;
sql.clear;
sql.add('select colume from table where nf=2002 and xh=3 and lx=2');
open;
end;
ADOquery1.Last;
ADOquery1.first;
if ADOquery1.recordcount>0 then
begin
temp:=ADOquery1.CreateBlobStream(ADOquery1.Fields[0],bmread);
ShowMessage(IntToStr(temp.size)); //用以查看temp的大小是否正常
end;
end;
 
上面的程序在ADOquery。Recordcount>0出报错:Project Project1.exe raised exception class
EOleException with message '提供者或其他服务返回E_FAIL状态。'Process stopped.Use
Stopped.Use Step or Run to continue.
请问各位大侠,用ADO读取blob字段有什么方法吗?
 
晕,2048不够大就改成20480不行吗?20M够了吧.

 
关于RecordCount出错的问题,请注意CursorType属性:

RecordSet的CursorType属性 [作者:adam]

关键词:ADO

并非每一个数据提供者都可以在ADO中为你提供所有游标。然而,如果一个数据提供者不能支持所要求的CursorTyoe,它可能会返回其他的游标。因此,你不得不改变你的游标!

通过ADO可以得到的CursorType有:

adOpenForwardOnly:顾名思义,这种游标只能向前移动。然而,由于这种游标功能有限,将它用于系统资源时是非常有效的。
 

adOpenKeyset:KeySet游标允许你看见自它创建起其他用户所做的修改,然而你却不能看到其他用户增加或删除的记录。
 

adOpneDynamic:此类型的游标功能强大同时也是耗费系统资源最多的游标。Dynamic游标可以看到他们保存记录集合的所有变化。使用Dynamic游标的用户可以看到其他用户所做的编辑、增加、删除。如果数据提供者允许这种类型的游标,那么它是通过每隔一段时间从数据源重取数据来支持这种可视性的。毫无疑问这会需要很多的资源。
 

adOpenStatic:Static类游标只是数据的一幅快照。这就是说,它无法看到自它创建以后其他用户对RecordSet所做的修改。采用这类游标你可以向前和向后航行。由于其功能简单,资源的需求比Dynamic要小!
注意:一旦打开RecordSet,你就无法改变CursorType属性。但是,如果你首先关闭RecordSet,改变CursorType属性,然后重新打开RecordSet,那么你仍可以有效地改变游标的类型!

 
这两者你有没有试过
1:设成这么大你的机器能运行过去吗?
我的机器运行不能通过。
2:对于cursertype
五种属性我都试过了,都没有用。这些如果你已经通过代码测试过了,请把源码
列出。
 
如果能解决此问题我愿送上我的全部分数
 
顶部