急!急!还是有关大字段(LONG RAW)存取的问题!(100分)

  • 主题发起人 主题发起人 yck
  • 开始时间 开始时间
Y

yck

Unregistered / Unconfirmed
GUEST, unregistred user!
我要用DELPHI3+ORACLE8.05存取一个大字段LONG RAW,
即把一个WORD或EXCEL文件存入数据库或从数据库中取出。

刚开始用TTABLE构件,应该没有问题。但是,TABLE的OPEN太慢。
所以我希望用TQUERY构件来实现,就出现问题了。
具体情况是:存入没有问题,取出时碰到了一些小麻烦:
对于<32K的文件,取出也没有问题,超过32K就有问题了:
取出后的文件大小为32K,从而也就达不开它了
后来,我仔细查看了BDE的HELP,发现可以修改其中BLOB SIZE的值。
HELP中明确指出:BLOB SIZE的值在32和1000之间,缺省为32。
我将它改为64后,小于64K的文件没有问题,大于64K的就有问题了:
取出后的文件大小为64K,从而也就达不开它了。

我将它改为大于64的数字后,文件大小的限定就没有规律了,
但是肯定必须小于64K,比如数字改为999后,
大于64K的文件取出后39934字节。

还有一点需要说明一下,存入的文件(最大的有4M多)
用TTABLE取出没问题。

BWT:我想问一下如何知道一个LONG RAW字段中存入的内容有多大,
即它的SIZE是多少?

希望各位大虾能赐教一下。

下面是我的源程序:
procedure TForm1.BtnSqlInClick(Sender: TObject);
VAR
S:STRING;
A:TFileStream;
begin
if not opendialog1.execute
then
exit;

A:=TFileStream.Create(opendialog1.filename,fmOpenRead);
with query1 do
begin
close;
sql.clear;
sql.add('insert into aa (a,b)');
Sql.Add('values (:a,:b)');
paramByName('a').asstring:=OpenDialog1.FileName;
ParamByName('b').DataType:=ftBlob;
paramByName('b').LoadFromStream(A,ftBlob);
execsql;
end;

ShowMessage('OK');
a.free;
end;

procedure TForm1.BtnSqlOutClick(Sender: TObject);
begin
if not opendialog1.execute
then
exit;

with query1 do
begin
close;
sql.clear;
sql.add('select A,B from AA');
Sql.Add('where a='''+OpenDialog1.FIleName+'''');
open;
if eof
then
begin
showmessage('eof');
if OleContainer1.State<>osEmpty
then
OleCOntainer1.DestroyObject;
exit;
end;
TBlobField(fieldByName('B')).savetofile('d:/qqqq.doc');

if OleContainer1.State<>osEmpty
then
OleCOntainer1.DestroyObject;

OleContainer1.CreateObjectFromFile('d:/qqqq.doc',false);
OleContainer1.DoVerb(ovPrimary);
end;
end;

 
怎么没人回答?
各位高手哪里去了?
紧急求救!!!
 
long raw 的 SIZE 是 2G/4G. 这时我忘掉了. 但可肯定>=2G.
我使用一套 DOA 空间完成 BLOB 字段的存取.
如果你要存取>32K的数据, 你要调用 DBMS 的开发包支持 或 你调用 OCI 函数.
不然就用这套空间.
周一我到公司去看看能否发给你这套空间.要几M


 
可以用TField.Size得到字段大小,但TField.DataType应为ftBLOB
 
>wysywyg:
我取出4M得文件时,
TBlobField.Size为1;
TBlobField.BlobSize为64k;
TBlobField.DataSize为0;
还是不对。

>guo_QPeter:
控件压缩后有多大?
我要事先准备好比较大得EMail信箱。


 
你申请一 21CN/ 263 的信箱,听说有4M / 8M

如你需要,发EMAIL 给我 GUO_LIU@HOTMAIL.COM / GUO_QPETER@263.NET
不知为何,我收不到 论坛的信.
开始我还以为你不要,今天满查一下,看到你的回应,抱歉让你久等

 
guo_qpeter:
收到我的EMAIL了没有?请回话。
 
奇怪,我没收到你的MAIL
不过我知道了,我将在明天上班时发给你
 
我在263上的帐号为:yuck263@263.net
 
我今天刚发往 YCK@FUDAN.EDU.
不知你收到没有?
如有何问题,发 EMAIL 给我. GUO_LIU@HOTMAIL / GUO_QPETER@263.NET
收不到 论坛的信, 问题一个个查, 好累
 
Hi,
Long Raw is in stead by BLOB/CLOB in oracle 8
you should not use it any more.
BLOB/CLOB can by 4GB.

ORACLE CHINA

 
hi,cpp!
你真的在ORACLE CHINA工作吗?
我用的是ORACLE 8.0.5企业版。
起初,我是用BOLB来实现的,但是DELPHI 3.0报错,
错误大致是“非法的数据类型”或“数据类型不匹配”,
没办法才改用LONG RAW的。
我基本上就是用ORACLE+DELPHI,以后还请多指教指教。
 
delphi4都不支持oracle805的blob字段存取,更何况delphi3了,delphi5倒是可以
blob字段可放4g,long raw 2g,不过每个表只能有一个long raw字段,wuwu
 
看来只能结束答案了!
我提的问题怎么都没有令我完全满意的答案??
哎!
可怜的大富翁,你很令我失望!
 
I havv sent file to you.
why you do not use it.
my platform is Oracle 8.1.5 and window nt workstation 4.0
develop tool is Delphi 5.0
I can get/save large object in Oracle blob field.
if you have some problem, just send email to me
guo_liu@hotmail.com
 
谢谢guo_qpeter!
那东西我是收到了。但是这里的讨论经常说DAO构件有点BUG,
不时会出些什么问题,所以我比较担心。
从我本意上讲,我还是希望用DELPHI自己的构件,
所以我说没有令我完全满意的答案。
因为你的构件可以解决这个问题,但是它的稳定性我心里没底。
再次谢谢你,guo_qpeter!
 

Similar threads

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