procedure TForm1.Button1Click(Sender: TObject); var Blob:TBlobStream; begin Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('select content from nordata where subservice=''YD'' and number=2'); Query1.Open; Blob:=Query1.CreateBlobStream(Query1.FieldByName('content'),bmRead); Blob.Read(PChar(Memo1.Text),Blob.Size); end;这段代码编译通不过,但帮助上的例子就是这样用的, 如果把TBlobStream改为TStream则编译能通过,但运行会报错
//写入 var MS: TMemoryStream; begin MS:=TMemoryStream.create; Image1.Picture.Bitmap.SaveToStream(MS); MS.Position:=0; Table1.Append; //在数据库中添加一条记录 TBlobField(Table1.FieldbyName(’image’)).LoadFromStream(MS); Table1.Post; //将所作的更新写入数据库 end; //读取 var MS: TStream; begin with Table1 do MS:=CreateBlobStream(FieldbyName(’image’),bmRead); Image1.Picture.Bitmap. LoadFromStream(MS); MS.Free; end;
Query1.CreateBlobStream(Query1.FieldByName('content'),bmRead) 结果是TStream,要先用一个TStream进行转换. function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; override;
procedure TForm1.Button1Click(Sender: TObject); var MyblobStream: TBlobStream; begin Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('select content from nordata where subservice=''YD'' and number=2'); Query1.Open; //用此句也可以,注意如果为bmWrite的话,要先query1.edit MyBlobStream := TBlobStream.Create(TBlboField(Query1.FieldByName('content')),bmRead); end;
我这样作了,但执行 TBlobStream.Create(TBlboField(Query1.FieldByName('content')),bmRead); 这一句时会报一个错: Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00404440 in module 'Project1.exe',Read of address FFFFFFF7',Process stopped.Use Step or Run to continue. 为什么会有非法的地址操作呢?
var
Blob:TBlobStream;
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select content from nordata where subservice=''YD'' and number=2');
Query1.Open;
Blob:=Query1.CreateBlobStream(Query1.FieldByName('content'),bmRead);
Blob.Read(PChar(Memo1.Text),Blob.Size);
end;这段代码编译通不过,但帮助上的例子就是这样用的,
如果把TBlobStream改为TStream则编译能通过,但运行会报错
var
MS: TMemoryStream;
begin
MS:=TMemoryStream.create;
Image1.Picture.Bitmap.SaveToStream(MS);
MS.Position:=0;
Table1.Append;
//在数据库中添加一条记录
TBlobField(Table1.FieldbyName(’image’)).LoadFromStream(MS);
Table1.Post;
//将所作的更新写入数据库
end;
//读取
var
MS: TStream;
begin
with Table1 do
MS:=CreateBlobStream(FieldbyName(’image’),bmRead);
Image1.Picture.Bitmap.
LoadFromStream(MS);
MS.Free;
end;
结果是TStream,要先用一个TStream进行转换.
function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; override;
var
MyblobStream: TBlobStream;
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select content from nordata where subservice=''YD'' and number=2');
Query1.Open;
//用此句也可以,注意如果为bmWrite的话,要先query1.edit
MyBlobStream := TBlobStream.Create(TBlboField(Query1.FieldByName('content')),bmRead);
end;
TBlobStream.Create(TBlboField(Query1.FieldByName('content')),bmRead);
这一句时会报一个错:
Project Project1.exe raised exception class EAccessViolation with message
'Access violation at address 00404440 in module 'Project1.exe',Read of
address FFFFFFF7',Process stopped.Use Step or Run to continue.
为什么会有非法的地址操作呢?