我想將一些TStringStreams連接成一個流。連接TStringStream
我在SQL Server中有一些blob(varbinary(max))字段,而且我想從所有行創建一個流,然後將其保存到文件中。
var
// MSWord: Variant;
i: Int32;
sA: TStringStream;
sP: TStringStream;
s: TStringStream;
// fString: TStrings;
begin
sA := TStringStream.Create;
s := TStringStream.Create;
sP := TStringStream.Create;
try
with DateED do
begin
BlobField.SaveToStream(sA);
sA.SaveToStream(s);
// s.CopyFrom(sA, sA.Size);
// s.LoadFromStream(sA);
s.Position := sA.Size;
end;
with DateED.spED_TemplateParagraf do
begin
First;
while not EOF do
begin
DateED.BlobField.SaveToStream(sP);
sP.SaveToStream(s);
s.Position := sP.Size;
sP.Clear;
Next;
end;
end;
s.SaveToFile('D:\test.doc');
finally
sA.Free;
s.Free;
sP.Free;
end;
由於某種原因,這並不能解決問題,任何人都可以幫我提出建議嗎?我如何連接我的Blob字段?
編輯:
所以試圖大衛的解決方案
procedure CopyBlobFieldToStream(ds: TDataSet; field: TBlobField; outputStream: TStream);
var
inputStream: TStream;
begin
inputStream := ds.CreateBlobStream(field, bmRead);
try
outputStream.CopyFrom(inputStream, inputStream.Size);
finally
inputStream.Free;
end;
end;
....
stream := TFileStream.Create(fileName, fmCreate);
try
CopyBlobFieldToStream(ds, field1, stream);
CopyBlobFieldToStream(ds, field2, stream);
finally
stream.Free;
end;
我仍然無法找到所有的領域的信息到
var
i: Int32;
stream: TFileStream;
Path1: string;
WordApp: TWordApplication;
begin
Path1 := IncludeTrailingPathDelimiter(GetEnvironmentVariable('TEMP')) +
FormatDateTime('yyyymmddhhnnssz', Now) + '.doc';
WordApp := TWordApplication.Create(nil);
stream := TFileStream.Create(Path1, fmCreate);
try
try
with dm do
begin
DataSet.First;
CopyBlobFieldToStream(dm.DataSet,
dm.DataSetBlobField, stream);
ShowMessage(IntToStr(stream.Size));
DataSet.Next;
CopyBlobFieldToStream(dm.DataSet,
dm.DataSetBlobField, stream);
ShowMessage(IntToStr(stream.Size));
CopyBlobFieldToStream(dm.DataSet2,
dm.DataSet2BlobField, stream);
ShowMessage(IntToStr(stream.Size));
end;
finally
stream.Free;
end;
WordApp.Documents.Open(Path1, EmptyParam, False, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
WordApp.Visible := True;
finally
WordApp.Free;
end;
後,這就是我所說的方式,但在Word碼頭中,我只能從第一個blob字段中找到文本,但實際上流的大小正在增加。
你爲什麼儲蓄ANSI文本到你的數據庫?如果您使用文本進行操作,那麼使用字符串處理它不容易嗎?爲什麼你使用字符串流呢?爲什麼要將ANSI文本存儲在二進制BLOB中? –
我的Blob字段實際上是一些單詞文檔。 – CiucaS
二進制BIFF8文件呢?當然不是適合用於字符串流的東西。這是二進制數據。不是文字。 –