关于TBlobStream的创建问题,急!(100分)

  • 主题发起人 主题发起人 cslegend
  • 开始时间 开始时间
C

cslegend

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做一个写入二进制数据的程序。调试总是不能通过现在把问题写下,
希望哪位大侠帮忙!代码如下:
With Table1 do //TTable控件
begin
Close;
Open;
(1) Append;
(2) Stream:=TBlobStream.Create (TBlobField(FieldByName('fingerBin')),bmReadWrite);
Try
(3) Stream.Seek(0, 2);
(4) Stream.Write(Pchar(Temp)^, length(temp));
iLen:=Stream.Size;
finally
Stream.Free;
end;
Post;
end;
出现的问题是:执行到(2)句时报错,如果将(2)句中的bmReadWrite改为bmWrite
效果一样.如果将(1)句:APPEND注释掉,效果也一样。但是改为bmRead则一切正常。
也就是说只能读取,不能添加和修改。我使用的是SQL SERVER 7.0数据库,
'fingerBin'字段是Binary类型.是否是类型不对?如果类型对的,那是什么
原因。
 
我的两段程序,希望对你有用。
{将硬盘上的文件写入到数据库中}
function TFrm_Blob.DiskToDB: Boolean;
var
Word_FileStream: TFileStream;
begin
Aqry_Blob.Edit;
Word_FileStream := TFileStream.Create(Edt_FileName.Text, fmShareDenyNone);
Word_FileStream.Position := 0;
TBlobField(Aqry_Blob.FieldByName(cb_BlobName.Text)).loadfromStream(Word_FileStream);
Aqry_Blob.Post;
Word_FileStream.Free;
Result := True; //一切任务完成,返回True
end;

{________________________________________________________________________________}
{将所有数据写入数据库}
function TFrm_Blob.DiskToDB_All: Boolean;
var
Word_FileStream: TFileStream;
begin
Word_FileStream := TFileStream.Create(Edt_FileName.Text, fmShareDenyNone);
Aqry_Blob.First;
while not Aqry_Blob.Eof do
begin
Aqry_Blob.Edit;
Word_FileStream.Position := 0;
TBlobField(Aqry_Blob.FieldByName(cb_BlobName.Text)).loadfromStream(Word_FileStream);
Aqry_Blob.Post;
Aqry_Blob.Next;
end;
Word_FileStream.Free;
Result := True; //一切任务完成,返回True
end;
 
To:yzhshi
谢谢你的程序。不过我要做的程序是将一个从单片机读出二进制数据写入数据库。
好象不能使用TFileStream类型。
 
问题早就解决了,但由于少上DFW,忘记结束这个问题了。现在给分吧。
yzhshi请见谅。
问题的原因是不能使用Binary类型的字段,必须使用Image类型。真奇怪他们都是二进制的啊。
 
呵呵,问题原因是:
SQL server提供了三种二进制数据类型:binary、varbinary、image。
binary[(n)]为定长数据,数据长度为n+4,n的最大值为8000
varbinary[(n)]为不定长数据,数据长度为n+4,n的最大值为8000
image也为不定长数据,但它的最大长度为(2^31)-1字节。

希望你能够看到[:)]
 
To:yzhshi
不是长度的问题,我的数据是指纹数据,长度只有4000多,如果使用ADO的话
可以使用binary类型,但是用BDE的话就不行,必须要Image类型,我看了TBlobStream
的原代码也看不出问题所在。
 
BDE不行?Ado可以?!
那么更改BDE数据库引擎的参数设置呢?也可能在这里面存在问题
 
应该不是这方面的问题,因为没什么好改的了。这个东西曾经搞了我快两天,我用ODBC试了也可以,
我怀疑是DELPHI的一个BUG。
 
to cslegend:
为什么我用ADO存储Binary也不行啊,我也是搞指纹的,有时间交流一下,不知你
解决了没有,用Image字段好像太浪费了点吧???
 
诸葛白痴:
如果是ADO的话就要使用TADOBlobStream,不能使用TBlobStream。
你也是搞指纹的?多交流下吧。你信箱是多少?我的是:cslegend@163.com
 
哦,我是直接用TStream,还没试,谢谢,我的是hzg115@sina.com or sohu.com
 
后退
顶部