当前位置:主页>仓库管理软件> 列表

ado中。bolb字段如何读到MemoryStream,还 找会计

库存管理软件版1楼: 如题

2楼: 下面的代碼,可以實現你的需要。
procedure TForm1.Button1Click(Sender: TObject);
var
Stream:TMemoryStream;
Conn:String;
begin
if SaveDialog1.Execute then
begin
Conn:= SaveDialog1.FileName;
Stream:=TMemoryStream.Create;
Stream.Position:=0;
try
TBlobField(ADOTable1.FieldByName(''acc'')).SaveToStream(Stream);
Stream.SaveToFile(Conn);
finally
Stream.Free;
end;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
Stream:TMemoryStream;
begin
if OpenDialog1.Execute then
begin
adotable1.Append;
ADOTable1.FieldByName(''name'').AsString:=OpenDialog1.FileName;
Stream:=TMemoryStream.Create;
Stream.Position:=0;
try
Stream.LoadFromFile(OpenDialog1.FileName);
TBlobField(ADOTable1.FieldByName(''acc'')).LoadFromStream(Stream);
finally
Stream.Free;
end;
end;
end; 如会计

3楼: TBlobField(sqlADOQuery.FieldbyName(''ICODATA'')).LoadFromStream(ms);//进入


ms:=ADOQuery1.CreateBlobStream(ADOQuery1.FieldbyName(''ICODATA''),bmRead);//出

4楼: 用tblobfield会出错啊 invaild class typecase

我用的数据库是sql200 datatype binary 800

5楼: ms:=ADOQuery1.CreateBlobStream(ADOQuery1.FieldbyName(''ICODATA''),bmRead);//出
这个是TStream类型
我要的是TMemoryStream类型。
这两个类型我用 TMemoryStream(ms)转换就会出错啊 invaild class typecase

6楼: var
ms: TMemoryStream;
begin
ms := TMemoryStream.Create;
mycad1.SaveToStream(ms);
MS.Position := 0;
if adoquery1.RecordCount <= 0 then
adoquery1.SQL.Text := ''insert into dctb values(:dct)''
else
adoquery1.SQL.text := ''update dctb set dct=:dct'';
adoquery1.Parameters[0].LoadFromStream(ms, ftBytes);
adoquery1.ExecSQL;
保存用这样子是可以的。就是读出来来的时候麻烦啊

库存管理软件版7楼: MemoryStream.CopyFrom(Stream,0);

8楼: 數據庫裡的表字段類型是:
字段名   數據類型
acc  -> image
name -> varchar(50)
然後用我上面的代碼就可以正確實現你的需要了。

9楼: OK,改成image就OK 了谢谢各位